JScrollPane изменяет размер, содержащий JPanel, когда появляются полосы прокрутки

У меня возникла небольшая проблема при использовании JScrollPaneв моем Java-приложении.

У меня есть JScrollPane, содержащий JPanel. Это JPanelдинамически обновляется кнопками (, упорядоченными по вертикали ), которые могут быть любой ширины. JPanelавтоматически подстраивает свою ширину под самый большой компонент JButtonвнутри.

Теперь, когда появляется вертикальная полоса прокрутки, она занимает некоторое пространство справа от моего JPanel, из-за чего самые большие кнопки не отображаются полностью. Я не хочу использовать горизонтальную полосу прокрутки в дополнение к отображению всей кнопки.

Есть ли способ изменить размер моего JPanelпри появлении полосы прокрутки, чтобы она красиво отображалась рядом с моими кнопками? Или есть другой способ, чтобы полоса прокрутки отображалась рядом с моим JPanel?

Заранее спасибо!

РЕДАКТИРОВАТЬ:Вот демонстрация моей проблемы. Когда вы уменьшаете размер окна до меньшей высоты, небольшая часть кнопок с правой стороны закрывается.

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();
                }
            }
        });
    }
}
8
задан dylan202 26 April 2012 в 10:30
поделиться