- 所有已实现的接口:
LayoutManager,LayoutManager2
GroupLayout 是一个 LayoutManager,它对组件进行分层分组,以便将它们放置在 Container 中。 GroupLayout 旨在供构建者使用,但也可以手动编码。分组由 Group 类的实例完成。 GroupLayout 支持两种类型的组。顺序组按顺序放置其子元素,一个接一个。平行组以四种方式之一对齐其子元素。
每个组可以包含任意数量的元素,其中一个元素是 Group 、 Component 或间隙。可以将间隙视为具有最小、首选和最大尺寸的不可见组件。此外 GroupLayout 支持首选间隙,其值来自 LayoutStyle 。
元素类似于弹簧。每个元素都有一个由最小值、首选值和最大值指定的范围。间隙具有开发人员指定的范围,或由 LayoutStyle 确定的范围。 Component 的范围由 Component 的 getMinimumSize、 getPreferredSize 和 getMaximumSize 方法确定。此外,在添加 Component 时,您可以指定要使用的特定范围,而不是组件中的范围。 Group 的范围由组的类型决定。 ParallelGroup 的范围是其元素范围的最大值。 SequentialGroup 的范围是其元素范围的总和。
GroupLayout 独立对待每个轴。即,有一组代表横轴,一组代表纵轴。水平组负责确定沿水平轴的最小、首选和最大尺寸,并设置其中包含的组件的 x 和宽度。垂直组负责确定沿垂直轴的最小、首选和最大尺寸,并设置其中包含的组件的 y 和高度。每个 Component 必须同时存在于水平和垂直组中,否则在布局期间或在请求最小、首选或最大大小时抛出 IllegalStateException。
下图显示了沿水平轴的顺序组。顺序组包含三个组件。沿垂直轴使用平行组。

为了强调每个轴都是独立处理的,该图显示了每个组和元素沿每个轴的范围。每个组件的范围已投影到轴上,并且组以蓝色(水平)和红色(垂直)呈现。为了可读性,顺序组中的每个元素之间都有一个间隙。
沿水平轴的顺序组呈现为蓝色实线。请注意,顺序组是它包含的子元素的总和。
沿垂直轴,平行组是每个组件高度的最大值。由于所有三个组件具有相同的高度,平行组具有相同的高度。
下图显示了相同的三个组件,但水平轴为平行组,垂直轴为顺序组。

由于 c1 是三个组件中最大的,因此并行组的大小为 c1。由于 c2 和 c3 小于 c1 它们根据为组件指定的对齐方式(如果指定)或并行组的默认对齐方式对齐。在图表中,c2 和 c3 是使用 LEADING 对齐创建的。如果组件方向是从右到左,则 c2 和 c3 将位于相反的一侧。
下图显示了沿水平轴和垂直轴的顺序组。

GroupLayout 提供了在 Component 之间插入间隙的能力。间隙的大小由 LayoutStyle 的实例确定。这可以使用 setAutoCreateGaps 方法打开。同样,您可以使用 setAutoCreateContainerGaps 方法在接触父容器和容器边缘的组件之间插入间隙。
下面构建了一个面板,其中一列有两个标签,下一列有两个文本框:
JComponent panel = ...;
GroupLayout layout = new GroupLayout(panel);
panel.setLayout(layout);
// Turn on automatically adding gaps between components
layout.setAutoCreateGaps(true);
// Turn on automatically creating gaps between components that touch
// the edge of the container and the container.
layout.setAutoCreateContainerGaps(true);
// Create a sequential group for the horizontal axis.
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
// The sequential group in turn contains two parallel groups.
// One parallel group contains the labels, the other the text fields.
// Putting the labels in a parallel group along the horizontal axis
// positions them at the same x location.
//
// Variable indentation is used to reinforce the level of grouping.
hGroup.addGroup(layout.createParallelGroup().
addComponent(label1).addComponent(label2));
hGroup.addGroup(layout.createParallelGroup().
addComponent(tf1).addComponent(tf2));
layout.setHorizontalGroup(hGroup);
// Create a sequential group for the vertical axis.
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
// The sequential group contains two parallel groups that align
// the contents along the baseline. The first parallel group contains
// the first label and text field, and the second parallel group contains
// the second label and text field. By using a sequential group
// the labels and text fields are positioned vertically after one another.
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(label1).addComponent(tf1));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(label2).addComponent(tf2));
layout.setVerticalGroup(vGroup);
运行时会产生以下内容。

该布局包括以下内容。
- 水平轴由包含两个平行组的顺序组组成。第一个并行组包含标签,第二个并行组包含文本字段。
- 垂直轴由包含两个平行组的顺序组组成。平行组被配置为沿基线对齐它们的组件。第一个并行组包含第一个标签和第一个文本字段,第二个并行组包含第二个标签和第二个文本字段。
- 您不需要显式地将组件添加到容器中;这是通过使用
Group的add方法之一间接完成的。 - 各种
add方法返回调用者。这允许轻松链接调用。例如,group.addComponent(label1).addComponent(label2);等同于group.addComponent(label1); group.addComponent(label2);。 Group没有公共构造函数;而是使用GroupLayout的创建方法。
- 自从:
- 1.6
-
内部类总结
内部类修饰符和类型类描述static enum枚举ParallelGroup对齐其子项的可能方式。classclass一个Group对齐和调整它的孩子。final class一个Group一个接一个地按顺序定位和调整其元素的大小。 -
字段摘要
字段修饰符和类型Field描述static final int指示组件或间隙的大小应用于特定范围值。static final int指示组件或间隙的首选尺寸应用于特定范围值。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述voidaddLayoutComponent(Component component, Object constraints) Component已添加到父容器的通知。voidaddLayoutComponent(String name, Component component) Component已添加到父容器的通知。createBaselineGroup(boolean resizable, boolean anchorBaselineToTop) 创建并返回一个ParallelGroup使其元素沿基线对齐。创建并返回对齐方式为Alignment.LEADING的ParallelGroup。createParallelGroup(GroupLayout.Alignment alignment) 创建并返回具有指定对齐方式的ParallelGroup。createParallelGroup(GroupLayout.Alignment alignment, boolean resizable) 创建并返回具有指定对齐和调整大小行为的ParallelGroup。创建并返回一个SequentialGroup。boolean如果自动创建容器和容器边界组件之间的间隙,则返回true。boolean如果自动创建组件之间的间隙,则返回true。boolean返回在调整组件大小和定位组件时是否考虑组件可见性。floatgetLayoutAlignmentX(Container parent) 返回沿 x 轴的对齐方式。floatgetLayoutAlignmentY(Container parent) 返回沿 y 轴的对齐方式。返回用于计算组件之间首选间隙的LayoutStyle。voidinvalidateLayout(Container parent) 使布局无效,表示如果布局管理器缓存了信息,则应将其丢弃。voidlayoutContainer(Container parent) 布置指定的容器。void强制指定组件沿指定轴具有相同的大小,而不管它们的首选大小、最小大小或最大大小如何。void强制指定的组件具有相同的大小,而不管它们的首选大小、最小大小或最大大小。maximumLayoutSize(Container parent) 返回指定容器的最大尺寸。minimumLayoutSize(Container parent) 返回指定容器的最小尺寸。preferredLayoutSize(Container parent) 返回指定容器的首选大小。voidremoveLayoutComponent(Component component) Component已从父容器中删除的通知。void用新组件替换现有组件。voidsetAutoCreateContainerGaps(boolean autoCreateContainerPadding) 设置是否应自动创建容器和接触容器边界的组件之间的间隙。voidsetAutoCreateGaps(boolean autoCreatePadding) 设置是否应自动创建组件之间的间隙。voidsetHonorsVisibility(boolean honorsVisibility) 设置在调整组件大小和定位组件时是否考虑组件可见性。voidsetHonorsVisibility(Component component, Boolean honorsVisibility) 设置是否考虑组件的可见性来调整大小和定位。void设置沿水平轴定位和调整组件大小的Group。voidsetLayoutStyle(LayoutStyle layoutStyle) 设置用于计算组件之间首选间隙的LayoutStyle。void设置沿垂直轴定位和调整组件大小的Group。toString()返回此GroupLayout的字符串表示形式
-
字段详细信息
-
DEFAULT_SIZE
public static final int DEFAULT_SIZE指示组件或间隙的大小应用于特定范围值。- 参见:
-
PREFERRED_SIZE
public static final int PREFERRED_SIZE指示组件或间隙的首选尺寸应用于特定范围值。- 参见:
-
-
构造方法详细信息
-
GroupLayout
为指定的Container创建一个GroupLayout。- 参数:
host-ContainerGroupLayout是LayoutManager- 抛出:
IllegalArgumentException- 如果主机是null
-
-
方法详情
-
setHonorsVisibility
public void setHonorsVisibility(boolean honorsVisibility) 设置在调整组件大小和定位组件时是否考虑组件可见性。true值表示不可见组件不应被视为布局的一部分。false的值表示无论可见性如何,都应定位组件并调整其大小。当动态调整组件的可见性并且您不希望周围的组件和大小发生变化时,
false的值很有用。指定值用于未指定明确可见性的组件。
默认值为
true。- 参数:
honorsVisibility- 在调整组件大小和定位组件时是否考虑组件可见性- 参见:
-
getHonorsVisibility
public boolean getHonorsVisibility()返回在调整组件大小和定位组件时是否考虑组件可见性。- 返回:
- 调整和定位组件时是否考虑组件可见性
-
setHonorsVisibility
设置是否考虑组件的可见性来调整大小和定位。Boolean.TRUE值表示如果component不可见,则不应将其视为布局的一部分。false的值表示component的定位和大小与其可见性无关。null的值表示应使用单参数方法setHonorsVisibility指定的值。如果
component不是这个GroupLayout管理的Container的孩子,它将被添加到Container。- 参数:
component- 组件honorsVisibility- 是否应考虑此component的可见性以调整大小和定位- 抛出:
IllegalArgumentException- 如果component是null- 参见:
-
setAutoCreateGaps
public void setAutoCreateGaps(boolean autoCreatePadding) 设置是否应自动创建组件之间的间隙。例如,如果这是true,并且您将两个组件添加到SequentialGroup,则会自动创建两个组件之间的间隙。默认值为false。- 参数:
autoCreatePadding- 组件之间的间隙是否自动创建
-
getAutoCreateGaps
public boolean getAutoCreateGaps()如果自动创建组件之间的间隙,则返回true。- 返回:
true如果自动创建组件之间的间隙
-
setAutoCreateContainerGaps
public void setAutoCreateContainerGaps(boolean autoCreateContainerPadding) 设置是否应自动创建容器和接触容器边界的组件之间的间隙。默认值为false。- 参数:
autoCreateContainerPadding- 容器与接触容器边界的组件之间是否应自动创建间隙
-
getAutoCreateContainerGaps
public boolean getAutoCreateContainerGaps()如果自动创建容器和容器边界组件之间的间隙,则返回true。- 返回:
true如果自动创建容器和容器边界组件之间的间隙
-
setHorizontalGroup
设置沿水平轴定位和调整组件大小的Group。- 参数:
group-Group沿水平轴定位和调整组件大小- 抛出:
IllegalArgumentException- 如果组是null
-
setVerticalGroup
设置沿垂直轴定位和调整组件大小的Group。- 参数:
group-Group沿垂直轴定位和调整组件大小- 抛出:
IllegalArgumentException- 如果组是null
-
createSequentialGroup
创建并返回一个SequentialGroup。- 返回:
-
一个新的
SequentialGroup
-
createParallelGroup
创建并返回对齐方式为Alignment.LEADING的ParallelGroup。这是更通用的createParallelGroup(Alignment)方法的覆盖方法。- 返回:
-
一个新的
ParallelGroup - 参见:
-
createParallelGroup
创建并返回具有指定对齐方式的ParallelGroup。这是更通用的createParallelGroup(Alignment,boolean)方法的覆盖方法,其中true为第二个参数提供。- 参数:
alignment- 组元素的对齐方式- 返回:
-
一个新的
ParallelGroup - 抛出:
IllegalArgumentException- 如果alignment是null- 参见:
-
createParallelGroup
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment, boolean resizable) 创建并返回具有指定对齐和调整大小行为的ParallelGroup。alignment参数指定如何定位未填充组的子元素。例如,如果一个对齐方式为TRAILING的ParallelGroup被赋予 100,而一个孩子只需要 50,则该孩子位于位置 50(组件方向为从左到右)。基线对齐仅在沿垂直轴使用时才有用。使用沿水平轴的基线对齐创建的
ParallelGroup被视为LEADING。有关基线组行为的详细信息,请参阅
ParallelGroup。- 参数:
alignment- 组元素的对齐方式resizable-true如果组可调整大小;如果该组不可调整大小,则首选大小用于该组的最小和最大大小- 返回:
-
一个新的
ParallelGroup - 抛出:
IllegalArgumentException- 如果alignment是null- 参见:
-
createBaselineGroup
public GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop) 创建并返回一个ParallelGroup使其元素沿基线对齐。- 参数:
resizable- 组是否可调整大小anchorBaselineToTop- 基线是锚定到组的顶部还是底部- 返回:
ParallelGroup- 参见:
-
linkSize
强制指定的组件具有相同的大小,而不管它们的首选大小、最小大小或最大大小。链接的组件被赋予每个链接组件的最大首选大小。例如,如果您链接两个首选宽度为 10 和 20 的组件,则两个组件的宽度都为 20。这可以多次使用以强制任意数量的组件共享相同的大小。
链接组件不可调整大小。
- 参数:
components- 具有相同大小的Components- 抛出:
IllegalArgumentException- 如果components是null,或包含null- 参见:
-
linkSize
强制指定组件沿指定轴具有相同的大小,而不管它们的首选大小、最小大小或最大大小如何。链接的组件被赋予每个链接组件的最大首选大小。例如,如果您沿水平轴链接两个组件并且首选宽度为 10 和 20,则两个组件的宽度都为 20。这可以多次使用以强制任意数量的组件共享相同的大小。
链接的
Component不能调整大小。- 参数:
axis- 链接尺寸的轴;SwingConstants.HORIZONTAL或SwingConstants.VERTICAL之一components- 具有相同大小的Components- 抛出:
IllegalArgumentException- 如果components是null,或包含null;或axis不是SwingConstants.HORIZONTAL或SwingConstants.VERTICAL
-
replace
用新组件替换现有组件。- 参数:
existingComponent- 应删除并替换为newComponent的组件newComponent- 放置在existingComponent位置的组件- 抛出:
IllegalArgumentException- 如果任一组件是null或existingComponent未由该布局管理器管理
-
setLayoutStyle
设置用于计算组件之间首选间隙的LayoutStyle。null的值表示应使用LayoutStyle的共享实例。- 参数:
layoutStyle- 要使用的LayoutStyle- 参见:
-
getLayoutStyle
返回用于计算组件之间首选间隙的LayoutStyle。这将返回指定给setLayoutStyle的值,它可能是null。- 返回:
LayoutStyle用于计算组件之间的首选间隙
-
addLayoutComponent
Component已添加到父容器的通知。您不应直接调用此方法,而应使用Group方法之一添加Component。- 指定者:
addLayoutComponent在接口LayoutManager中- 参数:
name- 要与组件关联的字符串component- 要添加的Component
-
removeLayoutComponent
Component已从父容器中删除的通知。您不应直接调用此方法,而应在父级Container上调用remove。- 指定者:
removeLayoutComponent在接口LayoutManager中- 参数:
component- 要删除的组件- 参见:
-
preferredLayoutSize
返回指定容器的首选大小。- 指定者:
preferredLayoutSize在接口LayoutManager中- 参数:
parent- 返回首选大小的容器- 返回:
parent的首选尺寸- 抛出:
IllegalArgumentException- 如果parent不相同Container这是用创建的IllegalStateException- 如果添加到此布局的任何组件不在水平和垂直组中- 参见:
-
minimumLayoutSize
返回指定容器的最小尺寸。- 指定者:
minimumLayoutSize在接口LayoutManager中- 参数:
parent- 返回大小的容器- 返回:
parent的最小尺寸- 抛出:
IllegalArgumentException- 如果parent与创建它的Container不同IllegalStateException- 如果添加到此布局的任何组件不在水平和垂直组中- 参见:
-
layoutContainer
布置指定的容器。- 指定者:
layoutContainer在接口LayoutManager中- 参数:
parent- 要布置的容器- 抛出:
IllegalStateException- 如果添加到此布局的任何组件不在水平和垂直组中
-
addLayoutComponent
Component已添加到父容器的通知。您不应直接调用此方法,而应使用Group方法之一添加Component。- 指定者:
addLayoutComponent在接口LayoutManager2中- 参数:
component- 添加的组件constraints- 组件放置位置的描述
-
maximumLayoutSize
返回指定容器的最大尺寸。- 指定者:
maximumLayoutSize在接口LayoutManager2中- 参数:
parent- 返回大小的容器- 返回:
parent的最大尺寸- 抛出:
IllegalArgumentException- 如果parent与创建它的Container不同IllegalStateException- 如果添加到此布局的任何组件不在水平和垂直组中- 参见:
-
getLayoutAlignmentX
返回沿 x 轴的对齐方式。这指定组件如何相对于其他组件对齐。该值应为 0 到 1 之间的数字,其中 0 表示沿原点对齐,1 表示离原点最远,0.5 表示居中,等等。- 指定者:
getLayoutAlignmentX在接口LayoutManager2中- 参数:
parent- 托管此LayoutManager的Container- 返回:
-
对齐;此实现返回
.5 - 抛出:
IllegalArgumentException- 如果parent与创建它的Container不同
-
getLayoutAlignmentY
返回沿 y 轴的对齐方式。这指定组件如何相对于其他组件对齐。该值应为 0 到 1 之间的数字,其中 0 表示沿原点对齐,1 表示离原点最远,0.5 表示居中,等等。- 指定者:
getLayoutAlignmentY在接口LayoutManager2中- 参数:
parent- 托管此LayoutManager的Container- 返回:
-
结盟;此实现返回
.5 - 抛出:
IllegalArgumentException- 如果parent与创建它的Container不同
-
invalidateLayout
使布局无效,表示如果布局管理器缓存了信息,则应将其丢弃。- 指定者:
invalidateLayout在接口LayoutManager2中- 参数:
parent- 托管此 LayoutManager 的Container- 抛出:
IllegalArgumentException- 如果parent与创建它的Container不同
-
toString
返回此GroupLayout的字符串表示形式。此方法旨在用于调试目的,返回字符串的内容和格式可能因实现而异。
-