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

posted on 2023-10-24 14:33  Mysticbinary  阅读(294)  评论(0编辑  收藏  举报