Java - 向JFrame添加组件

Tim*_*Tim 1 java swing jframe

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

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

myFrame.add(new JButton("OK"));
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

Container c = myFrame.getContentPane();
c.add(new JButton("OK"));
Run Code Online (Sandbox Code Playgroud)

其中一个'正确'?

Rob*_*bin 5

来自类javadoc的文字副本 JFrame

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

   frame.add(child);
Run Code Online (Sandbox Code Playgroud)

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

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