JGoodies Usage Notes

发布时间 2023-10-24 14:39:15作者: Mysticbinary

导包、设置

导入包:

<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 来写。 如果你只写一个,系统就会使用默认值。

对齐方式:

  • 列对齐有: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。

调整方式:
只知道基础grow的用法,如:left:pref:grow,表示此单元格左对齐,其内容将增长到列最大的宽度为止。
grow可以简写成g,
而且这个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 添加到第二行第一列