为什么按钮在 Flow Layout 上离开屏幕?

Why do buttons go off screen on Flow Layout?

我正在从 Head First Java 学习流程布局,我正在尝试让按钮环绕,因为它说 Flow Layout 应该(从左到右,从上到下)。

import javax.swing.*;
import java.awt.*;
public class Flow {
    public static void main(String[] args) {
        Flow gui = new Flow();
        gui.go();
    }
    public void go() {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        JButton buttonOne = new JButton("hello");
        JButton buttonTwo = new JButton("this is");
        JButton buttowThree = new JButton("woody");

        panel.add(buttonOne);
        panel.add(buttonTwo);
        panel.add(buttonThree);

        frame.getContentPane().add(BorderLayout.EAST, panel);
        frame.setSize(200,200);
        frame.setVisible(true);
    }
}

但是,当在框架的 EAST 区域设置面板时,按钮会离开屏幕并且不会环绕。如果我将面板设置在 NORTHSOUTH 区域,我只会看到两个按钮。如果我将面板设置在 CENTER 区域,它们会环绕并且可以清楚地看到它们。为什么是这样?

如果您要将组件添加到 BorderLayout 框架,EastWest 区域将使组件获得其首选宽度。由于面板包含三个按钮并将它们并排放置,因此面板的首选宽度是三个并排按钮的宽度。因此,它将变为 "off-the-screen",因为这是首选宽度。如果您改为点击 EAST 区域框架上的按钮并用足够的文本填充它,则会发生同样的情况。

CENTER 区域得到其他地区尚未处理的剩余部分。由于这是 CENTER 区域的策略,面板确实 NOT 获得其首选宽度或高度,因此强制面板的组件换行。

NORTHSOUTH 区域而言,面板将获得其首选高度,即最高组件的高度(在示例中所有按钮的高度相同)。因此,它认为没有理由包装。但是,面板 不会 获得其首选宽度。因此,按钮是 "cut off",因为面板可以具有的最大宽度是框架的宽度。当框架调整大小时,您会注意到按钮出现在屏幕上,因为 space 在面板上可用。