gpt4 book ai didi

java - 为什么按钮在流布局上会离开屏幕?

转载 作者:行者123 更新时间:2023-12-02 09:00:52 24 4
gpt4 key购买 nike

我正在从 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 区域将使该组件获得其首选宽度。由于面板包含三个按钮并将它们并排放置,因此面板的首选宽度是并排的三个按钮的宽度。因此,它会“超出屏幕”,因为这是首选宽度。如果您改为在 EAST 区域上点击框架上的按钮并用足够的文本填充它,也会发生同样的情况。

CENTER 区域获取其他区域尚未占用的剩余内容。由于这是 CENTER 区域的策略,面板无法获得其首选宽度或高度,因此会强制面板组件换行。

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

关于java - 为什么按钮在流布局上会离开屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60171686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com