1

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

例如,通过JFrame被叫myFrame,您可以执行以下操作:

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

你也可以这样做:

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

其中之一是“正确的”吗?

4

3 回答 3

6

来自类 javadoc 的文字副本JFrame

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

   frame.add(child);

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

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

于 2012-04-10T10:27:04.010 回答
2

不需要来自 Java5

  • 添加JComponentsContentPane, 只是JFrame.add(JComponent)

  • JFrame已实施BorderLayout,然后myFrame.add(new JButton("OK"));被放置到该CENTER区域

于 2012-04-10T10:27:24.897 回答
1

我肯定会说

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

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

myFrame.getContentPane();

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

于 2012-04-10T10:33:03.367 回答