我尝试设置JFrame
的布局,但似乎不起作用。这可能吗?
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
System.out.println(frame.getLayout().toString());
我从中得到的输出是:
java.awt.BorderLayout[hgap=0,vgap=0]
答案 0 :(得分:1)
您遇到了与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
,而不是自动传递调用