无法设置JFrame布局

时间:2018-10-19 00:00:48

标签: java jframe

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

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

我从中得到的输出是:

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

1 个答案:

答案 0 :(得分:1)

您遇到了与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,而不是自动传递调用

相关问题