Java Swing:选择正确的LayoutManager

时间:2011-06-23 16:24:49

标签: java swing layout-manager

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

这意味着当我有一个很大的值字段时,colum会越来越大(这很好),但另一列(所有JLabel s)也越来越大。这是一个截图:

enter image description here < BAD

正如您所看到的,image属性具有巨大的值,这使得两个列都更大,并且JLabel之后我有足够的空间。

所以,我正在搜索LayoutManager,这会使每列都尽可能大 我想要一个像这样的布局(用Gimp编辑):

enter image description here < GOOD

由于

6 个答案:

答案 0 :(得分:5)

您可以使用SpringLayout。请参阅How to Use SpringLayout

示例布局:

enter image description here

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:2)

虽然这是在11个小时前得到解答的,但我只是认为我会进入并且提个建议。我建议GroupLayout

我希望最近打破名称/值对话框的嵌套布局,同时查看GroupLayout& SpringLayout。似乎SpringLayout提供的唯一优势是它可以实现标签的正确对齐文本(可能有一种方法可以使用GL来实现,但我无法弄清楚如何)。在缺点方面,SpringLayout的Java Tutorial示例使用了一个惊人的“辅助类”来定义布局约束。

最后(这只是一个非常短暂的'研究')我选择使用GroupLayout

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

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