Java-向JFrame添加组件


问题内容

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

例如,一个JFramemyFrame你可以这样做:

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

您还可以执行以下操作:

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

这些“正确”之一吗?


问题答案:

来自类javadoc的文字副本 JFrame

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

   frame.add(child);

并将该子级添加到contentPane中。内容窗格将始终为非空。尝试将其设置为null将导致JFrame引发异常。默认的内容窗格将设置有BorderLayout管理器。有关添加,删除和设置JFrame的LayoutManager的详细信息,请参考RootPaneContainer。

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