Java JFrame&x27的布局管理器;s内容窗格
如前所述: 默认内容窗格是一个简单的中间容器 继承自JComponent,并使用边界布局作为其布局 经理 这里有一个证据:Java JFrame&x27的布局管理器;s内容窗格,java,swing,jframe,border-layout,contentpane,Java,Swing,Jframe,Border Layout,Contentpane,如前所述: 默认内容窗格是一个简单的中间容器 继承自JComponent,并使用边界布局作为其布局 经理 这里有一个证据: JFrame frame = new JFrame(); LayoutManager m = frame.getContentPane().getLayout(); System.out.println(m instanceof BorderLayout); // prints true 但是,您能否解释以下代码的输出 JFrame frame = new JFrame(
JFrame frame = new JFrame();
LayoutManager m = frame.getContentPane().getLayout();
System.out.println(m instanceof BorderLayout); // prints true
但是,您能否解释以下代码的输出
JFrame frame = new JFrame();
LayoutManager m = frame.getContentPane().getLayout();
System.out.println(m);
System.out.println(m.getClass().getName());
LayoutManager m2 = new BorderLayout();
System.out.println(m2);
System.out.println(m2.getClass().getName());
输出:
javax.swing.JRootPane$1[hgap=0,vgap=0]
javax.swing.JRootPane$1
java.awt.BorderLayout[hgap=0,vgap=0]
java.awt.BorderLayout
这解释了您的结果:
protected Container createContentPane() {
JComponent c = new JPanel();
c.setName(this.getName()+".contentPane");
c.setLayout(new BorderLayout() {
/* This BorderLayout subclass maps a null constraint to CENTER.
* Although the reference BorderLayout also does this, some VMs
* throw an IllegalArgumentException.
*/
public void addLayoutComponent(Component comp, Object constraints) {
if (constraints == null) {
constraints = BorderLayout.CENTER;
}
super.addLayoutComponent(comp, constraints);
}
});
return c;
}
创建contentpane的方法创建一个从BorderLayout继承的匿名内部类。
因此,在instanceof上测试将返回true,但它是另一个类,因此类名不同。此外,类名中的
$
是一个信号,表明内部类正在发挥作用。在本例中,内部类是匿名的,因此您看到的是$1而不是实际名称