如果我使用JFrame
在setLayout
上设置布局,然后使用getLayout
检索它,那么我会得到一个不同的LayoutManager
。这是怎么回事?
public class Lay {
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
java.awt.Container container =
new javax.swing.JFrame();
//new javax.swing.JPanel();
java.awt.LayoutManager layout =
new java.awt.GridLayout();
container.setLayout(layout);
layout = container.getLayout();
System.err.println(layout);
}
});
}
}
给出
java.awt.BorderLayout[hgap=0,vgap=0]
但如果我将JFrame
替换为JPanel
,我会
java.awt.GridLayout[hgap=0,vgap=0,rows=1,cols=0]
答案 0 :(得分:11)
public void setLayout(LayoutManager manager)
设置
LayoutManager
。重写以有条件地将呼叫转发至contentPane
。有关详细信息,请参阅RootPaneContainer
。
来自RootPaneContainer
页面:
此接口用作Swing GUI构建器的标记,需要处理包含单个
JFrame
的{{1}}等组件。为方便起见JRootPane
,JFrame
,JDialog
,JWindow
和JApplet
,默认情况下,默认转发所有对JInternalFrame
的调用,add
方法remove
和setLayout
。contentPane
。这意味着您可以致电:rootPaneContainer.add(component);
而不是:
rootPaneContainer.getContentPane().add(component);
JRootPane
是所有重量级组件使用的常见组件,看起来像本机操作系统窗口。它处理菜单栏,关闭/最小化/最大化按钮等。JFrame
试图隐藏JRootPane
从事真实工作的事实,但在这种情况下,它只是让事情变得更加混乱。 / p>