我正在处理我的第一个Swing应用程序,并且我遇到了一个关于我为用户创建的对话窗口的布局问题,以便在某些字段中输入值。因为显示的字段数量因用户选择而异,所以我在对话框中使用JScrollPane,将其视口设置为我添加字段组件的面板。
对于要显示的每个字段,我创建并添加三个组件:
即
namelabel:| _ __ _ | (字符串)
name2label:| __ | (数目)
所有这三个组件都可以有不同的长度,所以我的挑战是找到一种整理这些组件的整洁方法。我一直在做的是将主窗格的布局管理器设置为使用y轴的BoxLayout(即它垂直布置组件)。然后,我为每个字段创建一个窗格,为该窗格设置布局管理器,然后将所有三个字段组件添加到该窗格。我已经为各个窗格尝试了FlowLayout和BoxLayout,并且我遇到了这两个布局管理器的问题。
我将FlowLayout管理器设置为使用左对齐,但由于组件的长度不同,这导致了一个弯曲的列布局。我将BoxLayout设置为使用X轴(即水平放置),但随后组件的居中导致每个组件之间的间距很大。在使用单个窗格之前,我尝试使用GridLayout,但我从来没有能够遵守我的三列要求,导致字段跨行分割。我还简要地看了一篇关于GroupLayout经理的文章,但它似乎令人生畏:)
有没有人对如何在JScrollPane中以简洁紧凑的方式布置不同长度的三个不同组件的行数有任何建议?提前谢谢......
Sheldon R.
答案 0 :(得分:3)
这是一个常见问题:MiGLayout
是一个不错的选择。或者,BoxLayout
显示为here,Group Layout
显示为here。
答案 1 :(得分:1)
另请查看SpringLayout。
答案 2 :(得分:1)
更新:我的三栏目的想法没有成功,因为大多数其他想法都没有用,即BoxLayout,像大多数布局管理器一样,倾向于扩展组件以填充尽可能多的空间可以,所以我的田地被渲染为巨大的:)
所以我咬了一下子弹并尝试找出GroupLayout,基于@trashgod显示的示例与我想要实现的类似。在弄清楚如何以GroupLayout的方式做我想做的事情之后,我最初遇到了同样的扩展领域问题。然后Oracle GroupLayout教程向我展示了如何保持组件不被调整大小,即使用 addcomponent 方法的四参数版本:addComponent(field,GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)我试过了,它就像一个魅力。再次感谢@trashcan指出我正确的方向,并感谢其他所有想法的人......
Sheldon R.