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