1

谁能告诉我下面的代码有什么区别

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

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

4

2 回答 2

1

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

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

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

JRootPane层组成。底部是JMenuBar内容窗格,上方是玻璃窗格。

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

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

看看如何使用根窗格

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

您还可以查看内容以获取使用中的玻璃窗格的快速示例

于 2013-04-12T04:48:10.737 回答
1

两者都是相同的......
两者都添加到 java.awt.Container 对象中。

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

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

于 2013-04-12T04:54:41.363 回答