【问题标题】:Java Swing: Choosing the correct LayoutManagerJava Swing:选择正确的 LayoutManager
【发布时间】:2011-06-23 16:24:49
【问题描述】:

我正在构建一个 PropertyPanel。目前我正在使用GridLayout 来管理JLabels 及其相应的字段,我可以在其中指定值。但问题是GridLayout 自动管理列的大小:它使它们具有相同的宽度。

这意味着当我有一个大值字段时,列会变大(这很好),但另一列(我所有的JLabels)也会变大。截图如下:

  

如您所见,image 属性具有巨大的价值,这使得两列都变大了,而我在 JLabels 之后有很多空间。

所以,我正在寻找一个 LayoutManager,它可以使每一列都尽可能大。
我想要这样的布局(用 Gimp 编辑):

  

谢谢

【问题讨论】:

  • 为什么不使用两个单独的面板,每个面板都有自己的GridLayout
  • @mre:我不知道...但是整个属性面板应该可以调整大小。
  • 然后将上述两个面板放在另一个面板上。 :)

标签: java swing layout-manager


【解决方案1】:

您可以为此使用 SpringLayout。见How to Use SpringLayout

示例布局:

请记住,您也可以嵌套布局。

【讨论】:

  • +1,可能是更好的解决方案,虽然我不熟悉这种布局。
【解决方案2】:

SpringLayout 是我通常用于此类表单的。虽然我认为GridBagLayout 也可以很好地工作。

【讨论】:

    【解决方案3】:

    我倾向于尝试通过混合 GridLayout 和 BorderLayout 来破解所有内容,所以也许这不是最好的解决方案,但是...

    创建两个 GridLayout,它们都有一个列。一个用于标签,另一个用于控件。

    现在创建一个 BorderLayout 作为父级。

    将左侧网格添加到 BorderLayout.WEST,将右侧网格添加到 BorderLayout.CENTER。

    【讨论】:

    • @Rocky Triton,+1 这基本上是我的建议,但我将实现细节留给 OP。而且我不一定会称之为“黑客”。
    • 我认为如果单元格高度不同,使用两个 GrigLayouts 会得到非常奇怪的效果。
    • 唯一的问题是,如果某一行的组件较大,您的标签将无法正确排列。
    • @Rocky:谢谢你的想法!但我会选择SpringLayout
    • @mre 我称它为 hacking 因为更好的方法可能是使用 GridBagLayout,但经过 12 年以上的 Java 开发,我仍然避免学习如何正确使用它。
    【解决方案4】:

    虽然这已在 11 小时前得到答复,但我只是想我会弹出并提出建议。我建议GroupLayout

    我最近希望摆脱嵌套布局的名称/值对话框,并查看了 GroupLayoutSpringLayoutSpringLayout 提供的唯一优势似乎是它可以实现标签的右对齐文本(可能有一种使用 GL 的方法,但我不知道怎么做)。不利的一面是,SpringLayout 的 Java 教程示例使用了巨大的“帮助类”来定义布局约束。

    最后(这只是一个很短的“研究”)我选择使用GroupLayout

    【讨论】:

    • hmmm yout NestedLayout ???,我真的不喜欢将所有 JComponents 都粘在一个容器上以实现最复杂的 GUI .... 现在让我们为此找到更好的 LayoutManager :-) 也许 + 1
    【解决方案5】:

    考虑使用MigLayout。如果受限于当前 JDK,GridBagLayout.

    【讨论】:

      【解决方案6】:

      以下是标准 LayoutManager 的概述: http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html

      你可以例如如果您想手动编写 GUI,请使用 GridBagLayout 或非标准的 MigLayout。

      如果您想使用 GUI 构建器(例如 NetBeans 中的那个),您可以使用 GroupLayout。

      【讨论】:

        猜你喜欢
        • 2014-12-31
        • 2011-01-08
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多