2012-07-05 31 views
4

我必須寫:jframe.getContentPane()。add(button);java中的JFrame jframe.add(button);

但我發現,它也可以當我只寫

jframe.add(按鈕);

這兩種方法有什麼區別?是否有利於編寫JFrame.getContentPane()。add(button); ?

+0

請花一點時間瀏覽[Java文檔](http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel。html#contentpane):-) – 2012-07-05 18:34:28

回答

3

這是一個味道的問題。我一直使用的getContentPane()。添加(..),因爲我認爲這是更容易閱讀/知道實際發生的

+0

+1,對我來說是真的,因爲兩者意味着相同的東西,因爲無論你寫什麼,這兩個語句都會將所述'JComponent'添加到'Content Pane'的'CENTER'中'JFrame' :-) – 2012-07-05 18:23:36

+0

@HovercraftFullOfEels我搞混了什麼是「後者」我糾正了我的帖子。 TX! – ControlAltDel 2012-07-05 18:27:19

+0

但是什麼是差異? – 2012-07-05 18:29:58

1

所以,你應該知道的元素,如JButtonJTextArea等應加入Container和你方法:

getContentPane() 

返回該幀的Container對象。所以這兩種方法的工作原理相同,但應該使用第二種方法

在這種情況下,如果你將有很大的應用許多元素第一種方法是少可讀和第二通常建議。

差別不是:

Jframe.add() - 指定組件追加到這個容器的端部。這是爲Container.addImpl提供便利方法的 。

+0

但jframe.add(button)之間有什麼不同?和JFrame.getContentPane()。add(button); – 2012-07-05 18:30:57

+0

檢查更新的答案。 – Sajmon 2012-07-05 18:33:54

2

試試這個........

的Java 1.5到來之前,jframe.getContentPane()。添加(按鈕)使用.....並且那是合法的方式做到這一點....

但是,然後從Java 1.5及以上,包括myframe.add(按鈕)...作爲其中一個合法的方式做它..它就像, 使用Classname訪問靜態變量是這樣做的合法方式......但仍然可以使用類實例訪問靜態變量...

+1

以下鏈接來自[Java Doc](http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html#contentpane),它更詳細地描述了整個事情:-) – 2012-07-05 18:30:59

+0

謝謝不管怎樣,但我只希望你同意我的回答,或者我需要以某種方式編輯它。 – 2012-07-05 18:33:09

+0

純粹的,我同意你的回答,雖然字符串仍然附有兩個術語的用法,這就是爲什麼相關鏈接,如@HovercraftFullOfEels所解釋的,在其中一個評論中,雖然之後刪除:-)即使我自己也不確定,因爲使用哪個版本,因爲從未使用過Java 1.5:( – 2012-07-05 18:38:26

1

class javadoc of JFrame是這個

JFrame類相當清楚的是幀略有不符。像所有其他JFC/Swing頂級容器一樣,JFrame包含一個JRootPane作爲其唯一的孩子。通常,根窗格提供的內容窗格應包含JFrame顯示的所有非菜單組件。這與AWT框架案例不同。作爲方便添加及其變體,必要時,remove和setLayout已被覆蓋以轉發到contentPane。這意味着你可以這樣寫:

frame.add(child); 

那孩子將被添加到contentPane。