有人可以告诉我下面代码之间有什么区别
JFrame jf=new JFrame();
JButton jb=new JButton();
jf.add(jb);
和
JFrame jf=new JFrame();
Container c=jf.getContentPane();
JButton jb=new JButton();
c.add(jb);
即使我不清楚RootPane,LayeredPane,GlassPane。 RootPane有什么用?我从未在编码中使用它。我从下面的链接中读到了它
http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html
但不太清楚,因为我没有使用上述的实际情况。 谢谢你的回答!!
答案 0 :(得分:1)
从Java 5开始,代码示例之间没有区别。 JFrame#add
现在代表您重定向到JFrame#getContentPane
。
在Java 5之前,它会引发异常,这意味着您必须自己将组件直接添加到内容窗格中。
JRootPane
用于提供轻量级容器,可以在其上添加其他Swing组件。更重要的是,它提供了一种顶层Swing容器可以自行组织的方法。
JRootPane
由图层组成。在底部是JMenuBar
和内容窗格,上面是玻璃窗格。
由于它的构造方式,JRootPane
实际上可以有许多其他图层(通常在内容窗格和玻璃窗格之间),这通常用于弹出窗口等。
玻璃窗格用作叠加层,可用于在其他所有内容上呈现内容(以及阻止鼠标和键盘事件)。
通常,除了内容窗格和玻璃窗格之外,您通常不会使用根窗格的任何其他部分。
您还可以查看this,了解正在使用的玻璃窗格的快速示例
答案 1 :(得分:1)
两者都相同......
两者都添加在java.awt.Container对象中。
JFrame和Container具有以下层次结构
案例1:JFrame#add() - >帧#添加() - >窗口#添加() - > Container#add()//组件添加到容器
案例2:JFrame#getContentPane() - > 。的getRootPane()的getContentPane();它将返回Container对象(Container #add)