我已经看到了几种做有神论的方法,它们似乎都有效,但我只是想知道一种方法是否比另一种更好。
例如,通过JFrame
被叫myFrame
,您可以执行以下操作:
myFrame.add(new JButton("OK"));
你也可以这样做:
Container c = myFrame.getContentPane();
c.add(new JButton("OK"));
其中之一是“正确的”吗?
来自类 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。
所以两者都是等价的,而且都是正确的
不需要来自 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();
你以后不需要再写了。例如,如果您需要为框架设置另一个布局,它将使用它。但如前所述,两者都可以使用。