Java – 向JFrame添加组件
我已经看到了几种做主义的方法,他们似乎都有效,但我只是想知道一个人是否更好地练习另一个。
例如,使用名为myFrame
的JFrame
您可以执行以下操作:
myFrame.add(new JButton("OK"));
你也可以这样做:
Container c = myFrame.getContentPane(); c.add(new JButton("OK"));
其中一个’正确’?
来自JFrame
类javadoc的文字副本
JFrame类与Frame略有不兼容。 与所有其他JFC / Swing顶级容器一样,JFrame包含一个JRootPane作为其唯一的子级。 根窗格提供的内容窗格通常应包含JFrame显示的所有非菜单组件。 这与AWT Frame案例不同。 作为一个commiance add及其变体,remove和setLayout已被覆盖,以便在必要时转发到contentPane。 这意味着你可以写:
frame.add(child);
并且孩子将被添加到contentPane。 内容窗格始终为非null。 尝试将其设置为null将导致JFrame抛出exception。 默认内容窗格将在其上设置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"));
是最实用的一个。 因为你很可能以后需要使用容器
myFrame.getContentPane();
你以后不需要再写它。 例如,如果您需要为框架设置另一个布局,则可以使用它。 但如前所述,两者都可以使用。