为什么摇摆中的容器中有太多的分层?

时间:2013-04-12 04:25:50

标签: java swing jframe contentpane

有人可以告诉我下面代码之间有什么区别

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

但不太清楚,因为我没有使用上述的实际情况。 谢谢你的回答!!

2 个答案:

答案 0 :(得分:1)

从Java 5开始,代码示例之间没有区别。 JFrame#add现在代表您重定向到JFrame#getContentPane

在Java 5之前,它会引发异常,这意味着您必须自己将组件直接添加到内容窗格中。

JRootPane用于提供轻量级容器,可以在其上添加其他Swing组件。更重要的是,它提供了一种顶层Swing容器可以自行组织的方法。

JRootPane由图层组成。在底部是JMenuBar和内容窗格,上面是玻璃窗格。

由于它的构造方式,JRootPane实际上可以有许多其他图层(通常在内容窗格和玻璃窗格之间),这通常用于弹出窗口等。

玻璃窗格用作叠加层,可用于在其他所有内容上呈现内容(以及阻止鼠标和键盘事件)。

看看How to use Root Panes

通常,除了内容窗格和玻璃窗格之外,您通常不会使用根窗格的任何其他部分。

您还可以查看this,了解正在使用的玻璃窗格的快速示例

答案 1 :(得分:1)

两者都相同......
两者都添加在java.awt.Container对象中。

JFrame和Container具有以下层次结构
案例1:JFrame#add() - >帧#添加() - >窗口#添加() - > Container#add()//组件添加到容器

案例2:JFrame#getContentPane() - > 。的getRootPane()的getContentPane();它将返回Container对象(Container #add)