我見過兩種做有神論的方式,他們都似乎工作,但我只是想知道,如果一個更好的做法比另一個更好。Java - 向JFrame添加組件
例如,一個名爲JFrame
myFrame
你可以這樣做:
myFrame.add(new JButton("OK"));
而且你還可以這樣做:
Container c = myFrame.getContentPane();
c.add(new JButton("OK"));
是這些 '正確' 呢?
我見過兩種做有神論的方式,他們都似乎工作,但我只是想知道,如果一個更好的做法比另一個更好。Java - 向JFrame添加組件
例如,一個名爲JFrame
myFrame
你可以這樣做:
myFrame.add(new JButton("OK"));
而且你還可以這樣做:
Container c = myFrame.getContentPane();
c.add(new JButton("OK"));
是這些 '正確' 呢?
從JFrame
JFrame類類Javadoc逐字複製與框架稍微不兼容。像所有其他JFC/Swing頂級容器一樣,JFrame包含一個JRootPane作爲其唯一的孩子。通常,根窗格提供的內容窗格應包含JFrame顯示的所有非菜單組件。這與AWT框架案例不同。作爲方便添加及其變體,必要時,remove和setLayout已被覆蓋以轉發到contentPane。這意味着你可以這樣寫:
frame.add(child);
那孩子將被添加到contentPane。內容窗格將始終爲非空值。嘗試將其設置爲null將導致JFrame拋出異常。默認的內容窗格將設置一個BorderLayout管理器。有關添加,刪除和設置JFrame的LayoutManager的詳細信息,請參閱RootPaneContainer。
所以兩者是等價的,都是正確的
從Java5中不需要
添加JComponents
到ContentPane
,只是JFrame.add(JComponent)
JFrame
已經實施BorderLayout
,那麼myFrame.add(new JButton("OK"));
被放置到CENTER
區域
我會確定地說,
Container c = myFrame.getContentPane();
c.add(new JButton("OK"));
是最實用的一個。由於您很可能稍後需要使用容器,因此您不需要稍後再次寫入容器。例如,如果您需要爲框架設置另一個佈局,則會使用它。但如前所述,兩者都可以使用。
每一個不必要的字母都是噪音和噪音導致不可維護的代碼:-)雖然contentPane的屬性只能直接訪問(如fi背景,不透明..),但佈局不是其中的一個,因此您的參數咳嗽...... – kleopatra 2012-04-10 12:11:13