What is JGoodies ?
Swing UI 里面提供多种组件类出来使用,组件就是负责组件自身的功能,组件之间的布局方式是单独的,需要单独设计,布局方式有多种,我这里解释JGoodies 的使用。
JGoodies 导包、设置
导入包:
<dependency>
<groupId>com.jgoodies</groupId>
<artifactId>forms</artifactId>
<version>1.2.1</version>
</dependency>
idea里面布局切换一下:
行列规范解释
他是一个类似表格布局方式,你先设计好一个大的表格背景,然后将你想要的组件放置到指定表格里即可。然后再通过代码设置每个表格内的样式,使用逗号分割。
主要两个大类:
- 列 column
- 行 row
行列里面在细分:
- 列 column
列_1, 列_2, 列_3 ... - 行 row
行_1, 行_2, 行_3 ...
如果你在 Xxx.form页面里设置的是一列二行,那么下面的columnSpecs , rowSpecs 就必须严格对应,否则报错。
String columnSpecs = "pref";
String rowSpecs = "4dlu, pref";
// 使用 FormLayout 布局
FormLayout layout = new FormLayout(
columnSpecs,
rowSpecs
);
标识含义说明:
"pref":表示列的宽度会适应其最佳首选大小,即根据内容自动调整大小。
"min(pref, value)":表示列的宽度会适应其最佳首选大小,但不会小于指定的值。如果内容较小,则列会扩展到指定的最小值。
"max(pref, value)":表示列的宽度会适应其最佳首选大小,但不会大于指定的值。如果内容较大,则列会收缩到指定的最大值。
"fill":表示列宽度会填充可用的空间,平均分配给所有的填充列。
"fill:pref":表示列宽度会填充可用的空间,并且额外的空间按照列的最佳首选大小进行分配。
"grow":表示列会根据容器的可用空间进行扩展,以填充所有可用的空间。
"grow(value)":表示列会根据容器的可用空间进行扩展,但不会超过指定的值。
dlu 表示dialog units , 比如3dlu, 7dlu...
对于列规范,每个字符表示一个列。常见的简写字符包括:
"p":表示首选大小(preferred size)的列。
"m":表示最小大小(minimum size)的列。
"f":表示填充(fill)列,会填充可用的空间。
"g":表示增长(grow)列,会根据可用空间进行扩展。
"d":表示对话框单位(dialog units)大小的列。
对于行规范,也是类似的情况,每个字符表示一个行,并具有相同的含义:
"p":表示首选大小(preferred size)的行。
"m":表示最小大小(minimum size)的行。
"f":表示填充(fill)行,会填充可用的空间。
"g":表示增长(grow)行,会根据可用空间进行扩展。
"d":表示对话框单位(dialog units)大小的行。
每个单元格又可以嵌套:
- 逗号内的每个参数都由三个部分组成:
对齐方式:固定尺寸:调整方式
; - 当然也可以不按照
x:x:x
来写。 如果你只写一个值X 、两个值X:X
,剩余的值 系统就会使用默认值。
下面是对每个概念的解释:
- 对齐方式(Alignment):对齐方式确定组件在单元格中的位置。可以通过设置对齐方式来控制组件在水平和垂直方向上的对齐方式。常见的对齐方式包括左对齐、右对齐、居中对齐等。
- 固定尺寸(Fixed Size):固定尺寸指定单元格的宽度或高度为一个固定的数值。通过设置固定尺寸,可以确保单元格在布局中具有特定的大小,不受组件的首选尺寸或布局管理器的自动调整影响。
- 调整方式(Resize Behavior):调整方式定义了单元格在布局过程中如何调整其大小。常见的调整方式包括根据组件的首选尺寸调整、根据可用空间进行填充或增长等。调整方式可以确保单元格在布局中根据需要扩展或收缩。
对齐方式:
-
列对齐有:left, center, right, fill(其中fill表示填充至整个区域)
行的默认对齐方式是center; -
行对齐有:top, center, bottom, fill;
列的默认对齐方式是fill,
固定尺寸:
- pref——表示"首选大小"(Preferred Size)指的是组件在没有约束条件的情况下所希望具有的大小;
- min 表示minimum size;
- dlu 表示dialog units;
- px —— Pixel;
- pt —— Points;
- in —— Inches ;
- mm —— Millimeter;
- cm —— Centimeter;
- ...
调整方式:
- 如:left:pref:grow
"grow" 表示列会根据容器的可用空间进行扩展(其内容将增长到列最大的宽度为止),以填充所有可用的空间。- grow可以简写成g
- "grow(value)":表示列会根据容器的可用空间进行扩展,但不会超过指定的值。
- grow还可以这样写 grow(0.5),括号内是一个double型数字,当没有后面括号时默认为grow(1.0)。
- 当然也有与grow相反的,如:none、nogrow、n。
组件加入表格布局:
builder.add(component1).xy(1, 1); // 将 component1 添加到第一行第一列
panel.add(new JScrollPane(textArea1), cc.xy(1, 2)); // 将 textArea1 添加到第二行第一列
合并单元格的示例代码
准备工作:
// 创建单元格约束
private static CellConstraints cc() {
return new CellConstraints();
}
合并列
jPanel.add(new JScrollPane(table1), cc.xyw(1, 1, 2));
当使用 JGoodies 的 CellConstraints 类的 xyw() 方法时,其中的参数含义如下:
第一个参数:表示组件的起始列索引。在这个方法中,参数值为 1,表示组件从第一列开始。
第二个参数:表示组件的起始行索引。在这个方法中,参数值为 1,表示组件从第一行开始。
第三个参数:表示组件跨越的列数。在这个方法中,参数值为 2,表示组件跨越两列。
合并行
panel.add(label1, cc().xywh(1, 1, 2, 1));
解释一下 xywh(1, 1, 2, 1) 中参数的含义:
第一个参数:表示组件的起始列索引。在这个示例中,参数值为 1,表示组件从第一列开始。
第二个参数:表示组件的起始行索引。在这个示例中,参数值为 1,表示组件从第一行开始。
第三个参数:表示组件跨越的列数。在这个示例中,参数值为 2,表示组件跨越两列。
第四个参数:表示组件跨越的行数。在这个示例中,参数值为 1,表示组件跨越一行。
Reference
swing的jgoodies FormLayout
https://www.cnblogs.com/daichangya/archive/2013/04/11/12959890.html