Java Swing:选择正确的LayoutManager

Java Swing:选择正确的LayoutManager,java,swing,layout-manager,Java,Swing,Layout Manager,我在建一个不动产面板。目前,我正在使用GridLayout来管理jlabel及其相应的字段,在这些字段中我可以指定值。但问题是,GridLayout自动管理列的大小:它使它们具有相同的宽度 这意味着当我有一个大的值字段时,列变大了(这很好),但另一列(带我所有的JLabels)也变大了。以下是一个屏幕截图:

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

这意味着当我有一个大的值字段时,列变大了(这很好),但另一列(带我所有的
JLabel
s)也变大了。以下是一个屏幕截图:

正如您所看到的,
image
属性有一个巨大的值,这使得两列都变大了,在
JLabel
s之后我有很多空间

因此,我正在搜索一个
LayoutManager
,它使每一列尽可能大。
我想要这样的布局(使用Gimp编辑):


谢谢

您可以使用SpringLayout进行此操作。看

布局示例:


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

考虑使用。如果约束在当前JDK中,.

SpringLayout
是我通常用于此类表单的。尽管我认为,
GridBagLayout
也能很好地工作。

以下是标准布局管理器的概述:

例如,如果要手动编写GUI代码,可以使用GridBagLayout或非标准MigLayout


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

我倾向于尝试通过混合GridLayout和BorderLayout来破解所有问题,因此这可能不是最好的解决方案,但

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

现在创建一个BorderLayout作为父级


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

11小时前回答了这个问题,我只是想我会突然出现并提出一个建议。我建议

最近,我想打破嵌套布局,创建一个名称/值对话框,并查看了
GroupLayout
SpringLayout
SpringLayout
提供的唯一优势似乎是它可以实现标签的右对齐文本(可能有一种使用GL的方法,但我不知道如何实现)。另一方面,
SpringLayout
的Java教程示例使用了一个巨大的“helper类”来定义布局约束


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

为什么不使用两个单独的面板,每个面板都有自己的
GridLayout
?@mre:我不知道。。。但是整个propertypanel应该可以调整大小。然后将上述两个面板放在另一个面板上。:)@Rocky Triton,+1这基本上就是我的建议,但我把实现细节留给了OP。我不一定称之为“黑客”。我认为,如果单元格高度不同,使用两个网格将产生非常奇怪的效果。唯一的问题是,如果一行上的组件较大,则标签将无法正确对齐。@Rocky:谢谢你的想法!但是我会选择
SpringLayout
@mre,我称之为hacking,因为更好的方法可能是使用GridBagLayout,但是在做了12年多的java开发之后,我仍然避免学习如何正确使用它。+1,可能是更好的解决方案,尽管我不熟悉这个布局。hmmm yout NestedLayout???,真的,我不喜欢把所有的JC组件都放在一个容器中,用于最复杂的GUI。。。。现在让我们找到更好的布局经理:-)也许+1