JScrollPane Größe ändern mit JPanel, wenn Bildlaufleisten angezeigt werden

Ich habe ein kleines problem bei der Verwendung von JScrollPane in meine Java-Anwendung.

Ich habe eine JScrollPane mit einem JPanel.
Diese JPanel wird dynamisch aktualisiert, mit den Tasten (vertikal angeordnet), die in beliebiger Breite.
Die JPanel passt automatisch seine Breite zu den größten JButton Komponente im inneren.

Nun, wenn die vertikale Bildlaufleiste angezeigt wird, es nimmt etwas Platz auf der rechten Seite meines JPanel, die bewirkt, dass der größte buttons nicht vollständig angezeigt werden. Ich don ' T wollen, verwenden Sie die horizontale Bildlaufleiste neben der Anzeige der gesamten Schaltfläche.

Gibt es eine Möglichkeit, um die Größe meiner JPanel wenn eine scrollbar erscheint, so erscheint es schön neben meine buttons? Oder gibt es eine andere Möglichkeit die scrollbar erscheinen neben meinem JPanel?

Vielen Dank im Voraus!

BEARBEITEN: Hier ist eine demo von meinem problem. Wenn Sie die Fenstergröße ändern, um eine kleinere Höhe, ein kleiner Teil des buttons auf der rechten Seite abgedeckt wird.

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.GridLayout;

/**
 * @author Dylan Kiss
 */

public class Demo {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    JFrame myFrame = new JFrame("Demo");
                    JPanel sideBar = new JPanel();
                    JPanel centerPanel = new JPanel();
                    centerPanel.add(new JLabel("This is the center panel."));

                    JPanel buttonContainer = new JPanel();
                    JButton myButton = null;

                    for (int i = 0; i < 20; i++) {
                        buttonContainer.setLayout(new GridLayout(20, 1, 0, 0));
                        myButton = new JButton("This is my button nr. " + i);
                        buttonContainer.add(myButton);
                    }

                    sideBar.setLayout(new BorderLayout(0, 0));

                    JScrollPane scrollPane = new JScrollPane(buttonContainer);

                    sideBar.add(scrollPane);

                    myFrame.getContentPane().add(sideBar, BorderLayout.WEST);
                    myFrame.getContentPane().add(centerPanel, BorderLayout.CENTER);

                    myFrame.setLocationByPlatform(true);
                    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    myFrame.pack();
                    myFrame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
  • Könnten Sie SSCCE?
  • Es ist ein Teil von einem großen Projekt. Ich werde versuchen, eine kurze demo des Problems.
  • für neue Benutzer, ich nehme an, es besser zu verknüpfen, was ein SSCCE ist ! 🙂
  • + 1 für sscce.
InformationsquelleAutor dylan202 | 2012-04-26
Schreibe einen Kommentar