java - 无法设置 JFrame 布局

标签 java jframe

我尝试设置 JFrame 的布局,但似乎不起作用。这可能吗?

JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
System.out.println(frame.getLayout().toString());

我从中得到的输出是:

java.awt.BorderLayout[hgap=0,vgap=0]

最佳答案

您遇到了与 JFrame 相关的小层次结构问题。

JFrame 实际上不是单个组件,而是一个复合组件。这意味着它包含许多层,它们构成了窗口的实际结构,例如......

JFrame's rootpane

在 1.5 之前(我认为),您需要使用 JFrame#getContentPane#setLayoutJFrame#getContentPane#getLayout,正如您可以想象的那样,打字很乏味。

自 1.5 起,您现在可以直接调用 JFrame#setLayout,该调用将直接转发到 contentPane。问题是,getLayout 仍然需要返回框架本身使用的布局管理器,这就是您发现的漏洞。

如果您使用...

frame.setLayout(new FlowLayout());
System.out.println(frame.getContentPane().getLayout());

它将打印java.awt.FlowLayout[hgap=5,vgap=5,align=center]

是的,我知道,这并不完全明显,这就是为什么原始 API 要求您具体说明您的意图,直接调用 getContentPane,而不是自动传递调用

关于java - 无法设置 JFrame 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52884137/

相关文章:

java - Thread.sleep() 停止我的绘画?

java - Shell脚本java程序不能正确写入文件

java8从命令式转变为函数式

java - 如何在第二个窗口中更新 jFrame?

java - JLabel 作为背景图像

java - 在 JFrame 中保存复选框

java - 我们如何绘制这个饼图类?

Java - 信号量的广泛使用

java - 从数组中删除空元素(Java)

java - Jframe 顶部的 Facebook 蓝色背景