繁体   English   中英

Java - 添加组件到 JFrame

[英]Java - adding components to JFrame

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

例如,对于名为JFramemyFrame ,您可以执行以下操作:

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

你也可以这样做:

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

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

JFrame 的JFrame javadoc 的文字副本

JFrame class 与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区域

我会 def.netly 说

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

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

myFrame.getContentPane();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM