将组件直接添加到 JFrame 中,还是将它们放在 JPanel 中?
Add components directly to JFrame, or put them inside a JPanel?
我有一个关于 java GUI 的一般性问题。如果我有几个要添加到 JFrame 的组件,我应该将它们直接放在 JFrame 中,还是将它们添加到 JPanel,然后将面板添加到框架?如果首先将组件添加到 JPanel 是最好的,为什么?我通常这样做,然后我明白我不知道 why/if 这比直接添加到框架更可选。 JFrame 也有布局管理器,因此可以将它们置于正确的位置。
正如您正确提到的那样,JFrame 是具有所有功能(包括布局管理器)的常规容器。除非您打算在其他地方使用相同的视图,否则没有理由使用额外的包装器。
当您将组件添加到框架时,您将组件添加到框架的 content pane
。内容窗格是一个 JPanel。内容窗格的默认布局是 BorderLayout。
当您将组件直接添加到框架时,您实际上是在将组件添加到面板。因此,您拥有面板的所有布局功能。所以实际上,将组件添加到框架或使用您自己的面板作为框架的内容面板没有区别。
您真正需要决定的是您是否真的需要出于任何原因访问内容窗格?查看 Using Top Level Containers 上的 Swing 教程部分以获取更多信息。本教程对此主题进行了一些思考。
我不确定您为什么需要替换内容窗格的组件。如果您阅读了该论坛上的帖子,建议始终使用 CardLayout
来交换面板,这样您就永远不会直接处理内容面板。
我有一个关于 java GUI 的一般性问题。如果我有几个要添加到 JFrame 的组件,我应该将它们直接放在 JFrame 中,还是将它们添加到 JPanel,然后将面板添加到框架?如果首先将组件添加到 JPanel 是最好的,为什么?我通常这样做,然后我明白我不知道 why/if 这比直接添加到框架更可选。 JFrame 也有布局管理器,因此可以将它们置于正确的位置。
正如您正确提到的那样,JFrame 是具有所有功能(包括布局管理器)的常规容器。除非您打算在其他地方使用相同的视图,否则没有理由使用额外的包装器。
当您将组件添加到框架时,您将组件添加到框架的 content pane
。内容窗格是一个 JPanel。内容窗格的默认布局是 BorderLayout。
当您将组件直接添加到框架时,您实际上是在将组件添加到面板。因此,您拥有面板的所有布局功能。所以实际上,将组件添加到框架或使用您自己的面板作为框架的内容面板没有区别。
您真正需要决定的是您是否真的需要出于任何原因访问内容窗格?查看 Using Top Level Containers 上的 Swing 教程部分以获取更多信息。本教程对此主题进行了一些思考。
我不确定您为什么需要替换内容窗格的组件。如果您阅读了该论坛上的帖子,建议始终使用 CardLayout
来交换面板,这样您就永远不会直接处理内容面板。