我什么时候应该在java中使用JFrame.add(component)和JFrame.getContentPane().add(component)

2022-09-04 00:58:27

它们之间是否有区别,是否有任何条件应该使用一个而不是另一个?


答案 1

两个调用是相同的。在 Java 5 中,他们更改为将呼叫转接到内容窗格。jframe.add

来自 Java 5 发行说明

最后,七年后,我们使jFrame.add等同于jFrame.getContentPane().add()。

另外,请参阅 javadocs


答案 2

根据我从Javadocs的理解,JFrame.add调用后者。这是一种方便的方法,可以解决AWT的框架和Swings JFrame之间的不兼容性。

来自 javadocs for JFrame

JFrame 类与 Frame 稍微不兼容。与所有其他 JFC/Swing 顶级容器一样,JFrame 包含一个 JRootPane 作为其唯一的子级。根窗格提供的内容窗格通常应包含 JFrame 显示的所有非菜单组件。这与AWT框架的情况不同。作为便利添加及其变体,已删除和设置布局已被覆盖,以根据需要转发到内容窗格。这意味着您可以编写:

   `frame.add(child);`

孩子将被添加到内容窗格中。内容窗格将始终为非空。尝试将其设置为 null 将导致 JFrame 引发异常。默认内容窗格将在其上设置边框布局管理器。有关添加、删除和设置 JFrame 的布局管理器的详细信息,请参阅 RootPaneContainer。


推荐