Java JScrollPane中组件的面向列布局

Java JScrollPane中组件的面向列布局,java,swing,jscrollpane,layout-manager,Java,Swing,Jscrollpane,Layout Manager,我正在开发我的第一个Swing应用程序,我遇到了一个布局问题,这个问题与我为用户创建的对话框窗口有关,该窗口用于在某些字段中输入值。由于显示的字段数量因用户选择而异,因此我在对话框中使用JScrollPane,将其视口设置为添加字段组件的面板 对于要显示的每个字段,我创建并添加三个组件: “字段名”标签 字段组件(通常是JTextField,但也可以是JComboBox或JDateChooser控件) “字段类型”标签 i、 e 名称标签:字符串 名称2标签:|||(编号) 所有这三个组件都可以

我正在开发我的第一个Swing应用程序,我遇到了一个布局问题,这个问题与我为用户创建的对话框窗口有关,该窗口用于在某些字段中输入值。由于显示的字段数量因用户选择而异,因此我在对话框中使用JScrollPane,将其视口设置为添加字段组件的面板

对于要显示的每个字段,我创建并添加三个组件:

  • “字段名”标签
  • 字段组件(通常是JTextField,但也可以是JComboBox或JDateChooser控件)
  • “字段类型”标签
  • i、 e

    名称标签:字符串

    名称2标签:|||(编号)

    所有这三个组件都可以具有不同的长度,因此我的挑战是找到一种整洁的方式来布局这些组件。我一直在做的是将主窗格的布局管理器设置为使用y轴的BoxLayout(即,它垂直布局组件)。然后,我为每个字段创建一个窗格,设置该窗格的布局管理器,然后将所有三个字段组件添加到该窗格中。我试过对单个窗格使用FlowLayout和BoxLayout,但这两种布局管理器都有问题

    我将FlowLayout管理器设置为使用左对齐,但由于组件的长度不同,这导致列布局扭曲。我将BoxLayout设置为使用X轴(即水平布局),但随后的组件居中导致每个组件之间的间距很大。在使用单个窗格之前,我尝试使用GridLayout,但我始终无法使它满足我的三列要求,导致字段跨行拆分。我还简要地看了一篇关于GroupLayout manager的文章,但它似乎很吓人:)

    有没有人对如何在JScrollPane中以整洁、紧凑的方式布局三个不同长度的组件的不同行数有什么建议?先谢谢你


    Sheldon R.

    这是一个常见的问题:这是一个不错的选择。或者,如图所示。

    还可以看一看。

    更新:我的三栏想法不可行,原因与我的大多数其他想法不可行相同,即BoxLayout,与大多数布局管理器一样,倾向于扩展组件以尽可能多地填充空间,因此我的字段被渲染为巨大:)

    因此,我咬紧牙关,根据@trashgood所展示的示例,试图找出GroupLayout,这与我试图实现的目标类似。在弄清楚如何以GroupLayout的方式做我想做的事情后,我最初遇到了相同的扩展字段问题。然后,Oracle GroupLayout教程向我展示了如何防止组件被调整大小,即使用四参数版本的addcomponent方法:addcomponent(字段,GroupLayout.PREFERRED\u SIZE,GroupLayout.DEFAULT\u SIZE,GroupLayout.PREFERRED\u SIZE)我试过了,效果很好。再次感谢,@trashcan为我指明了正确的方向,也感谢所有提出想法的人


    Sheldon R.

    您必须使用网格袋布局-示例是组件应该如何布局?你能提供一些ASCII艺术的一些行与'扩大'的看法显示?为什么不在同一个标签中的字段名后面包含类型呢?Andrew,我编辑了我的问题,将我要做的事情转换成ASCII格式。我想,在字段名之后包含类型是一个选项,但我试图模拟我们的用户已经熟悉的主应用程序的外观。另外,如果少了一列组件,我就不会有同样的问题吗?谢谢你们的建议,伙计们。另一个我没有提到的想法是使用三个垂直窗格,每种组件一个。我会使用FlowLayout将这些窗格添加到主窗格中,然后使用Y轴方向的BoxLayout将组件添加到这些窗格中。当我确定了一种可以实现我所希望的方法后,我会向大家汇报,但再次感谢大家让我知道我的选择是什么。。。