我尝试设置 JFrame
的布局,但似乎不起作用。这可能吗?
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
System.out.println(frame.getLayout().toString());
我从中得到的输出是:
java.awt.BorderLayout[hgap=0,vgap=0]
最佳答案
您遇到了与 JFrame
相关的小层次结构问题。
JFrame
实际上不是单个组件,而是一个复合组件。这意味着它包含许多层,它们构成了窗口的实际结构,例如......
在 1.5 之前(我认为),您需要使用 JFrame#getContentPane#setLayout
和 JFrame#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/