web-dev-qa-db-fra.com

Défilement d'un JPanel

Je veux un JPanel avec une taille et une position définie. A l'intérieur du JPanel, j'ai un certain nombre d'éléments (boutons) insérés horizontalement. Parce que mon JPanel a une largeur définie, si j'ajoute beaucoup de boutons, je ne pouvais pas voir cela. Dans ce cas, j'ai besoin d'une barre de défilement pour ce JPanel. Mais ce JPanel doit être UNE CERTAINE TAILLE DANS UNE CERTAINE POSITION à l'intérieur d'un JFrame. La barre de défilement du JPanel s'est positionnée sous lui horizontalement. Quelqu'un peut m'aider? Je l'ai essayé sans succès!

15
Chu

Utilisez un JScrollPane et forcez sa taille préférée à votre taille donnée (ou définissez le conteneur ScrollPane LayoutManager sur null et appelez setBounds () sur le volet de défilement). Définissez également les stratégies de barre de défilement. En voici un petit échantillon:

import Java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Test {

    public static void main(String... args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        for (int i = 0; i < 10; i++) {
            panel.add(new JButton("Hello-" + i));
        }
        JScrollPane scrollPane = new JScrollPane(panel);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        scrollPane.setBounds(50, 30, 300, 50);
        JPanel contentPane = new JPanel(null);
        contentPane.setPreferredSize(new Dimension(500, 400));
        contentPane.add(scrollPane);
        frame.setContentPane(contentPane);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }
}
18
Guillaume Polet

Ajoutez tous les boutons à votre panneau. Ajoutez ensuite ce panneau dans le volet de défilement.

panel.add(button1);
panel.add(button2);
panel.add(button3);
.
.
.
panel.add(buttonn);

Une fois que vous avez ajouté des boutons dans le panneau, ajoutez le panneau au volet de défilement.

JScrollPane panelPane = new JScrollPane(panel);

Et puis ajoutez ce panneau à votre cadre.

5
Sachin Mhetre

Voici quelques solutions possibles:

ou

  • pour faire défiler jusqu'à la décision Point ou Rectangle il existe la méthode scrollRectToVisible par ex. myPanel.scrollRectToVisible(myButton.getBounds());
4
mKorbel