gpt4 book ai didi

java - 我无法让 BoxLayout 的 setPreferredSize() 方法按照我希望的方式工作

转载 作者:行者123 更新时间:2023-11-29 03:55:28 24 4
gpt4 key购买 nike

我想我解决了我的问题,但我不知道为什么会这样,所以我希望有人能向我解释一下,这样我以后就不会再犯同样的错误了。

这是一个简单的例子,可以编译我正在尝试做的事情:

public class BoxLayoutTest extends JFrame
{
public BoxLayoutTest()
{
setSize(400,300);
JPanel mainPanel = new JPanel(new FlowLayout());
setContentPane(mainPanel);

JPanel subPanel = new JPanel();
subPanel.setLayout(new BoxLayout(subPanel, BoxLayout.PAGE_AXIS));
subPanel.setBackground(Color.BLUE);

JLabel labelTest = new JLabel("This is a test");
subPanel.add(labelTest);

labelTest.setPreferredSize(new Dimension(150, 20));
mainPanel.add(subPanel);
System.out.println(mainPanel.getSize());
}

public static void main( String[] args )
{
BoxLayoutTest testFrame = new BoxLayoutTest();
testFrame.setVisible(true);
}
}

起初,我遇到了问题,因为包含 JLabel 的面板没有按照首选大小调整大小。我发现这是因为我使用了 mainPanel.getSize() 的一些变体作为我的子面板的首选大小。在此示例中,我使用了有效的实际数值。

它不能以旧方式工作的原因(这实际上是我希望有人解释的事情),正如在 SOP 行中看到的那样,mainPanel.getSize() 返回宽度和高度的原因0 而它显然占据了整个屏幕,即 400x300。

感谢@camickr 告诉我不应该为我的面板设置 preferredSize,这帮助我找出了问题的根源。

最佳答案

Why [does] mainPanel.getSize() returns a width and a height of 0?

直到pack() “使此 Window 的大小适合其子组件的首选大小和布局,”尺寸将为零。

System.out.println(mainPanel.getSize());
this.pack();
System.out.println(mainPanel.getSize());

控制台:

java.awt.Dimension[width=0,height=0]java.awt.Dimension[width=160,height=30]

关于java - 我无法让 BoxLayout 的 setPreferredSize() 方法按照我希望的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6632679/

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