Wie kann man an ein JPanel eine Scrollbar anheften?

B0hn3

Mitglied
Das JPanel soll Einträge (Buttons) enthalten, die man anklicken kann. Wenn die Buttons alle in das JPanel passen, soll es keine Scrollbar geben. Wenn es mehr Buttons gibt, als auf dem JPanel angezeigt werden können, soll hingegen eine Scrollbar erscheinen. Ich habe diverse Sachen probiert, auch mit JScrollpane aber es macht leider nicht das, was ich mir vorstelle. Hier nochmal verdeutlicht:
sdfsfsafsfd.png
 
Java:
JFrame frame = new JFrame();
frame.setSize(200,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);

JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS));

for(int i = 0; i < 15; i++) {
    buttonPanel.add(new JButton("Button#" + (i+1)));
}

frame.add(new JScrollPane(buttonPanel));
frame.setVisible(true);
Geht wunderbar
 
Java:
JFrame frame = new JFrame();
frame.setSize(200,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);

JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS));

for(int i = 0; i < 15; i++) {
    buttonPanel.add(new JButton("Button#" + (i+1)));
}

frame.add(new JScrollPane(buttonPanel));
frame.setVisible(true);
Geht wunderbar

OK danke, aber wie kann ich es machen, dass ich selbst die Bounds von dem buttonPanel bestimmen kann? In deinem Beispiel nimmt das buttonPanel die ganze Fläche des JFrame ein..
 
Eine einfache Variante ist das null Layout.
Java:
JFrame frame = new JFrame();
        frame.setSize(200, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS));

        for (int i = 0; i < 15; i++) {
            buttonPanel.add(new JButton("Button#" + (i + 1)));
        }

        JPanel container = new JPanel();
        container.setBackground(Color.BLACK);
        container.setLayout(null);
        JScrollPane scrollPane = new JScrollPane(buttonPanel);
        container.add(scrollPane);
        scrollPane.setBounds(10, 10, 150, 200);
        frame.add(container);
       
        frame.setVisible(true);
 

Neue Themen


Zurück
Oben