Java - 向JFrame添加组件

时间:2012-04-10 10:21:50

标签: java swing jframe

我已经看过几种做有神论的方法,但它们似乎都有效,但我只是想知道一种方法是否比另一方更好。

例如,使用名为JFrame的{​​{1}}即可:

myFrame

你也可以这样做:

myFrame.add(new JButton("OK"));

其中一个'正确'吗?

3 个答案:

答案 0 :(得分:5)

来自JFrame

的类javadoc的文字副本
  

JFrame类与Frame略有不兼容。与所有其他JFC / Swing顶级容器一样,JFrame包含JRootPane作为其唯一子级。根窗格提供的内容窗格通常应包含JFrame显示的所有非菜单组件。这与AWT Frame案例不同。作为一个commiance add及其变体,remove和setLayout已被覆盖,以便在必要时转发到contentPane。这意味着你可以写:

   frame.add(child);
  

孩子将被添加到contentPane。内容窗格始终为非null。尝试将其设置为null将导致JFrame抛出异常。默认内容窗格将在其上设置BorderLayout管理器。有关添加,删除和设置JFrame的LayoutManager的详细信息,请参阅RootPaneContainer。

所以两者都是等价的,两者都是正确的

答案 1 :(得分:2)

不需要来自Java5

  • JComponents添加到ContentPane,只需JFrame.add(JComponent)

  • JFrame已实施BorderLayout,然后将myFrame.add(new JButton("OK"));置于CENTER区域

答案 2 :(得分:1)

我绝对会说

Container c = myFrame.getContentPane();
c.add(new JButton("OK"));

是最实用的一个。因为您很可能以后需要使用

的容器
myFrame.getContentPane();

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