调整网格布局面板的大小

Resizing the panels on gridlayout

我正在尝试用 Java 挥杆做一个简单的 ui 游戏。这是我的目标布局设计:(所有面板的宽度相同,请原谅我的绘图)

我需要 3 个小高度面板和 1 个大面板

我用了 GridLayout 和 4x1。我在第一个面板中添加了一些按钮。

mainFrame = new JFrame("Basket Game");
mainFrame.setLayout(new GridLayout(4, 1));


options = new JPanel();
options.setLayout(new FlowLayout());
options.setBorder( new TitledBorder("Options Menu") );

options.add(settings);
options.add(start);
options.add(pause);
options.add(reset);
options.add(exit);

mainFrame.add(options);

但这会使第一个面板太大。

如何设置这些面板的大小,或者我应该使用不同的布局模式。

使用 GridLayout,网格中的所有单元格都具有相同的大小,这就是为什么您的面板具有总高度的 1/4 的原因。

您可以考虑使用垂直 BoxLayout

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
// add the panels to mainPanel, then
mainFrame.setContentPane(mainPanel);

这是一个示例,三个面板各包含一个按钮,一个面板的尺寸更大:

        JFrame frame = new JFrame();

        JPanel p1 = new JPanel();
        p1.add(new JButton("11111"));
        JPanel p2 = new JPanel();
        p2.add(new JButton("222222"));
        JPanel p3 = new JPanel();
        p3.add(new JButton("3333"));
        JPanel p4 = new JPanel();
        p4.setPreferredSize(new Dimension(50, 400));

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        mainPanel.add(p1);
        mainPanel.add(p2);
        mainPanel.add(p3);
        mainPanel.add(p4);

        frame.setContentPane(mainPanel);
        frame.pack();
        frame.setVisible(true);