【问题标题】:Why do buttons go off screen on Flow Layout?为什么流布局上的按钮会离开屏幕?
【发布时间】:2020-05-27 00:40:06
【问题描述】:

我正在学习 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 区域,它们会自动换行并且可以清楚地看到它们。为什么是这样?

【问题讨论】:

  • 嗨维德,你是对的,我发布的答案没有回答你的问题。我已经适当地删除了答案。对于它的价值,我给你的建议是不要陷入 FlowLayout 的缺陷中(就像我说的,它总是可用性有限),而是花时间学习其他一些 LayoutManager,比如 BoxLayout 和 BorderLayout。

标签: java swing layout-manager border-layout flowlayout


【解决方案1】:

如果您将组件添加到 BorderLayout 框架,EastWest 区域将使组件获得其首选宽度。由于面板包含三个按钮并将它们并排放置,因此面板的首选宽度是三个按钮并排的宽度。因此,它正在“离屏”,因为这是首选宽度。如果您要改为在 EAST 区域的框架上添加一个按钮并用足够的文本填充它,也会发生同样的情况。

CENTER 区域将获得其他区域所没有的任何内容还没被占用。由于这是CENTER 区域的策略,因此面板确实 获得其首选宽度或高度,因此强制面板的组件进行换行。

NORTHSOUTH 区域而言,面板将获得其首选高度,即最高组件的高度(在示例中,所有按钮的高度相同)。因此,它认为没有理由换行。然而,面板没有得到它的首选宽度。因此按钮被“切断”,因为面板可以具有的最大宽度是框架的宽度。您会注意到,当框架调整大小时,按钮会出现在屏幕上,因为面板上有可用空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多