【问题标题】:Do I need JPanel always?我总是需要JPanel吗?
【发布时间】:2020-08-05 07:03:37
【问题描述】:

我现在正在编写用于启动游戏窗口的简单 GUI 代码。我只需要你想开始游戏消息和窗口上的开始按钮。但我对JFrameJPanel 有一个令人困惑的概念。实际上,我认为我需要将JPanel 添加到JFrame 以添加其他组件,例如JLabelJButton,...等。但我意识到我实际上并不需要JPanel。我可以简单地使用add(button)add(label) 将组件添加到JFrame。那么为什么我需要JPanel。我认为JFrame 不需要JPanelJPanel 需要JFrame。我理解正确吗?

【问题讨论】:

  • 请阅读this... 您将希望所有 gui 元素都使用面板而不是单个框架。
  • 当您在 JFrame 中添加组件时,这些组件会被添加到 JFrame 的内容窗格中。您可以使用 jFrame.getContentPane().add(button),它的行为与直接将组件添加到 JFrame 相同。
  • JFrame 的内容窗格是一个 Container 类。只有你需要一个容器来添加组件。 JPanel 是一个容器。其他一些容器就像 - JLayeredPane 等。
  • 最好以JPanel 开头,为什么?因为在多个面板之间切换更容易。然后框架就充当“顶级容器”,您可以围绕它执行其他所有操作

标签: java swing jframe jpanel jcomponent


【解决方案1】:

不,并非总是如此。只需将组件“直接”添加到 JFrame 即可实现简单的图形用户界面。但为了获得更大的灵活性,您将始终使用 JPanel。例如,在 GUI 的不同部分采用不同的布局,将某些组件组合在一起等。

JFrame 由JRootPane 支持,其中一部分是contentPane

(图片来自Oracle Javadoc

将组件添加到 JFrame 时,实际上是在将它们添加到内容窗格中,例如:frame.getContentPane().add(Component)

JFrame 是 Swing GUI 应用程序的常见起始场景,而 JPanel 旨在放置在另一个场景(容器)中。由于内容窗格和 JPanel 都继承自同一个类 (Container),因此您可以以类似的方式使用它们,只要向它们添加组件即可。

【讨论】:

    【解决方案2】:

    我是否总是需要JPanel

    没有。好吧,除非您需要 Swing GUI。那么是的。

    另一个答案回答了大意的话。 “不,您可以将组件直接添加到框架中”他们错过的是添加到JFrame 的组件被添加到内容窗格(自动)。内容窗格JPanel

    话虽如此:

    1. 我(和许多其他人)建议基于主内容面板设计应用程序,然后根据需要将该面板添加到顶级容器中。顶级容器可能是JFrameJWindowJDialogJOptionPane ..
    2. 是什么引发了这个问题? JPanel 是一个非常“轻量级”的容器(以多种方式)。一个 GUI 可以包含 1000 个并且不会因此而增加负担。当然,这是一个罕见的要求,但只是说 .. 根据需要使用面板,不用担心。

    【讨论】:

    • 我明白了。谢谢!!
    • 不客气。 :) 如果有助于解释,请accept the answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多