我见过两种做有神论的方式,他们都似乎工作,但我只是想知道,如果一个更好的做法比另一个更好。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