【发布时间】:2012-02-02 23:08:21
【问题描述】:
我正在开发我的第一个 Swing 应用程序,但我遇到了与我为用户创建的用于在某些字段中输入值的对话窗口有关的布局问题。因为显示的字段数量因用户选择而异,所以我在对话框中使用 JScrollPane,将其视口设置为我添加字段组件的面板。
对于要显示的每个字段,我创建并添加三个组件:
- “字段名称”标签
- Field 组件(通常是 JTextField,但也可以是 JComboBox 或 JDateChooser 控件)
- “字段类型”标签
即
名称标签:|____| (字符串)
name2label: |__| (数量)
所有这三个组件都可以有不同的长度,所以我的挑战是找到一种整洁的方式来布局这些组件。我一直在做的是将主窗格的布局管理器设置为使用 y 轴的 BoxLayout(即它垂直布局组件)。然后,我为每个字段创建一个窗格,为该窗格设置布局管理器,然后将所有三个字段组件添加到该窗格。我已经为各个窗格尝试了 FlowLayout 和 BoxLayout,但我对这两个布局管理器都有问题。
我将 FlowLayout 管理器设置为使用左对齐,但由于组件的长度不同,这导致了弯曲的列布局。我将 BoxLayout 设置为使用 X 轴(即水平放置东西),但随之而来的组件居中导致每个组件之间的间距很大。在使用单个窗格之前,我尝试使用 GridLayout,但我无法让它满足我的三列要求,导致字段跨行拆分。我还简要地看了一篇关于 GroupLayout 管理器的文章,但它看起来很吓人 :)
对于如何以简洁、紧凑的方式在 JScrollPane 中布局不同长度的三个组件的不同行数,是否有人有任何建议?提前谢谢...
谢尔顿 R.
【问题讨论】:
-
你必须使用网格包布局 - 例如Here
-
组件应该如何布局?您能否提供一些显示“扩展”视图的某些行的 ASCII 艺术?为什么不在同一个标签中包含字段名后面的类型呢?
-
安德鲁,我编辑了我的问题以对我正在尝试做的事情进行 ASCII 再现。我想在字段名称之后包含类型是一个选项,但我试图模拟我们的用户已经熟悉的主应用程序的外观。另外,如果少一列组件,我是否还会遇到同样的问题?
标签: java swing jscrollpane layout-manager