Java Swing:选择正确的LayoutManager

5
我正在构建一个PropertyPanel。目前我使用的是GridLayout来管理JLabels及其相应的字段,以便我可以指定值。但问题在于GridLayout自动管理列的大小:它使它们的宽度相同。
这意味着当我有一个大的值字段时,列会变得更大(这很好),但另一列(带有所有我的JLabels)也会变得更大。这是一个屏幕截图:
如您所见,image属性具有巨大的值,这使得两个列变得更大,而且在JLabels后面有很多空间。
因此,我正在寻找一个LayoutManager,它可以使每个列尽可能地大。 我想要这样的布局(使用Gimp进行编辑):
谢谢

为什么不使用两个带有自己的GridLayout的单独面板呢? - mre
@mre:我不知道...但整个属性面板应该是可调整大小的。 - Martijn Courteaux
然后将上述两个面板放在另一个面板上。 :) - mre
6个回答

5
你可以使用 SpringLayout 来实现这个功能。详见如何使用 SpringLayout
示例布局:

enter image description here

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

+1,可能是更好的解决方案,尽管我对这种布局不熟悉。 - mre

2

SpringLayout 是我通常用来处理类似这样的表单。虽然我认为 GridBagLayout 也很适合。


2
我倾向于通过混合GridLayout和BorderLayout来尝试攻击一切,所以也许这不是最好的解决方案,但是...
创建两个GridLayout,它们都只有一个列。一个用于标签,另一个用于控件。
现在创建一个BorderLayout作为父容器。
将左侧网格添加到BorderLayout.WEST,将右侧网格添加到BorderLayout.CENTER。

@Rocky Triton,+1,这基本上就是我所建议的,但我把实现细节留给了OP。而且我不一定会称其为“黑客攻击”。 - mre
3
如果单元格高度不同,使用两个GridLayout会产生非常奇怪的效果。 - Puce
唯一的问题在于,如果一个组件在一行上更大,则标签将无法正确对齐。 - jzd
@Rocky:谢谢你的建议!但我会选择SpringLayout - Martijn Courteaux
2
@mre 我称之为“黑客”,因为更好的方法可能是使用GridBagLayout,但在进行了12年以上的Java开发后,我仍然避免学习如何正确使用它。 - Rocky Pulley
@martin:是的,那可能是更好的解决方案,我甚至从未尝试过那种布局。 - Rocky Pulley

2
虽然这个问题已经在11小时前得到了回答,但我想提出一个建议。我建议使用GroupLayout
最近我正在寻找一种打破嵌套布局的方法来创建一个名称/值对话框,并查看了GroupLayoutSpringLayout。似乎SpringLayout唯一提供的优势是可以实现标签的右对齐文本(可能有一种使用GL的方法,但我无法弄清楚如何)。不足之处在于,Java教程中SpringLayout的示例使用了一个庞大的“helper class”来定义布局约束。
最终(这只是一个非常简短的“研究”),我选择使用GroupLayout

嗯,你用了NestedLayout???实际上,我不太喜欢把所有的JComponents都粘贴到一个容器中来创建最复杂的GUI....现在让我们找一个更好的LayoutManager吧 :-) 或许+1 - mKorbel

1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接