![](/img/trans.png)
[英]How to add spacing between JPanel and JFrame's contentPane?
[英]LayoutManager of JFrame's contentPane
如此处所述: 将组件添加到内容窗格 ,
默认的内容窗格是一个简单的中间容器,它继承自JComponent,并使用BorderLayout作为其布局管理器。
这是一个证明:
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;
}
创建内容窗格的方法将创建一个继承自BorderLayout的匿名内部类。 因此,对instanceof进行测试将返回true,但返回另一个类,因此该类名称不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.