Java - adding components to JFrame

て烟熏妆下的殇ゞ 提交于 2019-11-29 08:48:36

A literal copy from the class javadoc of JFrame

The JFrame class is slightly incompatible with Frame. Like all other JFC/Swing top-level containers, a JFrame contains a JRootPane as its only child. The content pane provided by the root pane should, as a rule, contain all the non-menu components displayed by the JFrame. This is different from the AWT Frame case. As a conveniance add and its variants, remove and setLayout have been overridden to forward to the contentPane as necessary. This means you can write:

   frame.add(child);

And the child will be added to the contentPane. The content pane will always be non-null. Attempting to set it to null will cause the JFrame to throw an exception. The default content pane will have a BorderLayout manager set on it. Refer to RootPaneContainer for details on adding, removing and setting the LayoutManager of a JFrame.

So both are equivalent, and both are correct

From Java5 isn't required

  • to add JComponents to the ContentPane, just JFrame.add(JComponent)

  • JFrame has implemented BorderLayout, then myFrame.add(new JButton("OK")); is placed to the CENTER area

I would definetly say that the

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

Is the most practical one. Since you will most likely later on need to use the container that is the

myFrame.getContentPane();

you don't need to write it again later. It will for example be used if you need to set another layout for the frame. But as said earlier, both can be used.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!