установка размера JPanel - PullRequest
3 голосов
/ 19 ноября 2010

У меня есть класс, который расширяет JPanel с именем Row.У меня есть куча строк, добавленных к JLabel , код следующий:

JFrame f=new JFrame();

JPanel rowPanel = new JPanel();
//southReviewPanel.setPreferredSize(new Dimension(400,130));
rowPanel.setLayout(new BoxLayout(rowPanel, BoxLayout.Y_AXIS));
rowPanel.add(test1);
rowPanel.add(test1);
rowPanel.add(test2);
rowPanel.add(test3);
rowPanel.add(test4);
rowPanel.setPreferredSize(new Dimension(600, 400));
rowPanel.setMaximumSize(rowPanel.getPreferredSize()); 
rowPanel.setMinimumSize(rowPanel.getPreferredSize());

f.setSize(new Dimension(300,600));

JScrollPane sp = new JScrollPane(rowPanel);
sp.setSize(new Dimension(300,600));
f.add(sp);

f.setVisible(true);

, где test1 ... и т. Д. - это строка.Однако, когда я изменяю размер окна, расположение строки как-то становится грязным (оно также изменяет размер) ... как я могу предотвратить это?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2010

Прочтите руководство по Swing на Использование менеджеров по макету .Каждый менеджер компоновки имеет свои собственные правила о том, что происходит при изменении размера контейнера.Экспериментируйте и играйте.

В случае BoxLayout следует учитывать максимальный размер компонентов, добавляемых на панель, поэтому вы можете сделать следующее:

childPanel.setMaximumSize( childPanel.getPreferredSize() );

Если вам нужна дополнительная помощь, опубликуйте свой SSCCE демонстрирует проблему.

1 голос
/ 19 ноября 2010

Я взял код в http://download.oracle.com/javase/tutorial/uiswing/examples/layout/BoxLayoutDemoProject/src/layout/BoxLayoutDemo.java и адаптировал его к тому, что вы пытаетесь сделать, используя только кнопки вместо пользовательских JPanels:

public class BoxLayoutDemo {
    public static void addComponentsToPane(Container pane) {
        JPanel rowPanel = new JPanel();
        pane.add(rowPanel);

        rowPanel.setLayout(new BoxLayout(rowPanel, BoxLayout.Y_AXIS));
        rowPanel.add(addAButton("Button 1"));
        rowPanel.add(addAButton("Button 2"));
        rowPanel.add(addAButton("Button 3"));
        rowPanel.add(addAButton("Button 4"));
        rowPanel.add(addAButton("5"));
        rowPanel.setPreferredSize(new Dimension(600, 400));
        rowPanel.setMaximumSize(rowPanel.getPreferredSize()); 
        rowPanel.setMinimumSize(rowPanel.getPreferredSize());
    }

    private static JButton addAButton(String text) {
        JButton button = new JButton(text);
        button.setAlignmentX(Component.CENTER_ALIGNMENT);
        return button;
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("BoxLayoutDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Set up the content pane.
        addComponentsToPane(frame.getContentPane());

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

Конечный результат: alt text

Как видите, ряд кнопок идеально выровнен.Если вы измените размер JFrame, они останутся выровненными.Это то, что вы ищете?

...