设置JPanel的大小

时间:2010-11-19 04:13:10

标签: java swing jpanel

我有一个扩展名为Row的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 ...等是一行。然而,当我调整窗口大小时,Row的布局会变得混乱(它也会调整大小)...我怎样才能防止这种情况发生?

2 个答案:

答案 0 :(得分:3)

阅读Using Layout Managers上的Swing教程。每个布局管理器都有自己的规则,关于调整容器大小时会发生什么。实验和游戏。

对于BoxLayout,它应该尊重添加到面板的组件的最大大小,以便您可以这样做:

childPanel.setMaximumSize( childPanel.getPreferredSize() );

如果您需要更多帮助,请发布SSCCE来证明问题。

答案 1 :(得分:1)

我在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的大小,它们将保持一致。那是你在找什么?