Java – 向JFrame添加组件

我已经看到了几种做主义的方法,他们似乎都有效,但我只是想知道一个人是否更好地练习另一个。

例如,使用名为myFrameJFrame您可以执行以下操作:

 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(); 

你以后不需要再写它。 例如,如果您需要为框架设置另一个布局,则可以使用它。 但如前所述,两者都可以使用。