2013-04-12 39 views
1

誰能告訴我什麼是對的rootPane,的layeredPane,玻璃面板爲什麼在鞦韆的容器中有太多分層?

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的用途是什麼?我從未在編碼中使用過它。我從以下鏈接

http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

讀它,但沒有太多明確的,因爲存在這樣的情況我已經使用了上述無實際情況。 感謝您的回答!

回答

1

從Java 5開始,您的代碼示例之間沒有區別。 JFrame#add現在以您的名義重定向到JFrame#getContentPane

在Java 5之前,它會拋出異常,這意味着您必須直接將組件添加到內容窗格中。

JRootPane用於提供一個輕量級的容器,其上可以添加其他Swing組件。更重要的是,它提供了頂層Swing容器可以自行組織的方法。

JRootPane由層組成。底部是JMenuBar和內容窗格,上面是玻璃窗格。

由於它的構造方式,JRootPane實際上可以有多個附加層(通常位於內容窗格和玻璃窗格之間),通常用於彈出窗口等。

玻璃窗格可用作疊加層,它可用於渲染其他任何內容(以及阻止鼠標和鍵盤事件)的內容。

看看How to use Root Panes

通常情況下,除了內容窗格和玻璃窗格之外,您通常不會使用根窗格的任何其他部分。

你也可以看看this的玻璃板的一個簡單的例子在使用

1

兩者都是一樣的...
兩者都在java.awt.Container中的對象添加。 () - > Frame#add() - > Window#add() - > Container#add()//組件添加到容器中()組件添加到容器(); getRootPane()。getContentPane();方法2:JFrame#getContentPane() - > getRootPane()。getContentPane();它將返回Container對象(Container#add)

+0

案例1(部分)錯誤。從Java 5開始,'addImpl'委託給內容窗格。之前,它會拋出異常 – MadProgrammer