【问题标题】:Recommendation for Layout Manager布局管理器推荐
【发布时间】:2012-08-09 22:13:21
【问题描述】:

我正在为街机游戏创建 GUI。它由一个 JFrame 和一些 JPanel 和一个 JMenu 组成,如图所示:

我一直在尝试使用 BorderLayout,但它无法正确显示面板。我得到的是 JMenu 正确显示。 [1] 调整其宽度以包含其中的按钮。 JPanel [2] 几乎完成了屏幕的其余部分。并且 [3] 在末尾显示为一条细线。

这是我用来放置它们的代码片段:

    add(new TopMenu(), BorderLayout.PAGE_START);    // JMenu
    add(new LeftPanel(), BorderLayout.WEST);        // [1]
    add(new StatusPanel(), BorderLayout.CENTER);    // [2]
    add(new GameUI(), BorderLayout.LINE_END);       // [3]

欢迎提出任何可能引发这种行为的建议。

【问题讨论】:

  • 我猜这是 Hovercraft 的答案,但是将 JPanel_2 和 JPanel_3 嵌套在 rightPanel 中。 JPanel_1 将是 leftPanel。

标签: java swing alignment border-layout gui-design


【解决方案1】:

您始终可以嵌套 JPanel/容器,每个都使用自己的布局。因此,整体布局可能是一个 BorderLayout,菜单位于 BorderLayout.NORTH,JPanel [1] 位于 BorderLayout.EAST 侧,然后使用另一个 BorderLayout 或 BoxLayout 将 JPanel 嵌套到 BorderLayout.CENTER 位置,然后将您的另一个将两个 JPanel 放入此 JPanel。例如,这个 CENTER JPanel 可以使用 BorderLayout,它可以将 JPanel [2] 保持在其 BorderLayout.NORTH 位置,并将 JPanel [3] 保持在其 BorderLayout.CENTER 位置。

【讨论】:

  • 我希望您的 GUI 代码不像您的段落结构那样复杂。 :-)
  • 这是一个解决方案。谢谢!但是,在这种情况下,是否还有其他布局管理器可能更有用?
  • @GilbertLeBlanc 抱歉,英语不是我的主要语言。但我正在学习 =)
  • @al arayaq:嵌套 JPanel 没有任何问题。您必须注意每个 JPanel 的边距。如果边距成为问题,您始终可以使用 GridBagLayout,您可以更好地控制边距。我曾经学过 GridBagLayout,现在我只是将它用于我构建的每个 GUI。
  • @GilbertLeBlanc 下次我会记住这一点,因为现在我的时间有点短。无论如何谢谢。
【解决方案2】:

你的 JPanel 必须有 Swing 组件,否则当你在 JFrame 上调用 pack() 时,它们会缩小到最小尺寸。

由于您正在创建游戏,您需要在JPanel 上设置首选尺寸,并在JFrame 上设置首选尺寸。我假设您至少要使用paintComponent 方法直接绘制JPanel 组件之一。

您可以将 JPanel-2JPanel-3 嵌套在 rightPanel 中。您可以将FlowLayout 用于rightPanel 本身,也可以将JPanel-1rightPanel 放入JFrame

如果你坚持使用一个布局管理器来布局 3 个JPanel 而不嵌套,你将不得不使用GridBagLayoutJPanel-1 将是 1 列宽和 2 行深。 JPanel-2 将是 1 列宽和 1 列深。 JPanel-3 将是 1 列宽和 1 列深。

您仍然需要设置 3 个JPanel 的首选大小。

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多