FlowLayout 垂直占用太多space,换个高度

FlowLayout takes up too much vertical space, change height

我有 JFrame,它使用 FlowLayout 作为按钮,使用 BoxLayout 作为 JFrame,看起来像这样:

我需要它看起来像这样:

由于某种原因,按钮(绿色)的 JPanel 占用太多 space,而红色面板上的标签都在同一行,而不是每个都在不同的行行。

我的代码如下:

import javax.swing.*;
import java.awt.*;
 
public class ButtonsTest extends JFrame {
    private JButton button1 = new JButton("Button1");
    private JButton button2 = new JButton("Button2");
    private JButton button3 = new JButton("Button3");
    private JButton button4 = new JButton("Button4");

    private JPanel panel = new JPanel(new FlowLayout());
    private JPanel otherPanel = new JPanel();


    public ButtonsTest()  {

        setPreferredSize(new Dimension(200, 200));
        setMinimumSize(new Dimension(200, 200));
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
        panel.add(button4);

        panel.setBackground(Color.GREEN);
        add(panel);

        setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));

        otherPanel.add(new Label("1"));
        otherPanel.add(new Label("2"));
        otherPanel.add(new Label("3"));
        otherPanel.setBackground(Color.RED);

        add(otherPanel);

        pack();
    }

    public static void main(String[] args) {
        ButtonsTest test = new ButtonsTest();
    }
}

我的错误是什么?

For some reason the JPanel of the buttons (green) takes up too much space

使用 BoxLayout 时,当有额外的 space 可用时,组件将增长到最大大小。因此额外的 space 被分配给红色和绿色面板。

不要将内容窗格的布局设置为使用 BoxLayout。

while the labels on the red panel are all on the same row, instead of each on a different row.

默认情况下 JPanel 使用 Flow layout

解决方法是使用默认的BorderLayout JFrame。

然后使用以下方法将绿色面板添加到框架中:

add(panel, BorderLayout.PAGE_START);

然后对于“otherPanel”,您可以使用 BoxLayout:

otherPanel.setLayout( new BoxLayout(otherPanel, BoxLayout.Y_AXIS) );

然后使用以下方法将“otherPanel”添加到框架中:

add(otherPanel, BorderLayout.CENTER);

此外,应在框架可见之前将组件添加到框架中。所以 setVisible(...) 语句应该是构造函数中的最后一条语句。