- 所有已实现的接口:
-
LayoutManager
,LayoutManager2
SpringLayout
根据一组约束条件布置其关联容器的子组件。请参阅The Java Tutorial中的如何使用SpringLayout以查看使用SpringLayout
的示例。
每个约束由一个Spring
对象表示,控制两个组件边缘之间的垂直或水平距离。这些边缘可以属于容器的任何子组件,或者属于容器本身。例如,可以使用控制组件西(左)边缘和东(右)边缘之间距离的约束来表示组件的允许宽度。组件的允许y坐标可以通过约束组件的北(顶部)边缘和其容器的北边缘之间的距离来表示。
SpringLayout
控制的容器的每个子组件,以及容器本身,都有一个与之关联的约束集。这些约束由一个SpringLayout.Constraints
对象表示。默认情况下,SpringLayout
创建的约束使其关联的组件具有组件的Component.getMinimumSize()
、Component.getPreferredSize()
和Component.getMaximumSize()
方法返回的最小、首选和最大尺寸。初始时,x和y位置没有约束,因此在您约束它们之前,Component
将相对于父Container
的Insets
定位在0,0处。
您可以通过多种方式更改组件的约束。您可以使用putConstraint
方法之一在同一容器中的两个组件的边缘之间建立一个弹簧。或者,您可以使用getConstraints
获取适当的SpringLayout.Constraints
对象,然后修改一个或多个弹簧。或者,您可以使用getConstraint
获取组件的特定边缘的弹簧,并对其进行修改。您还可以通过在将组件添加到其容器时指定约束对象(使用Container.add(Component, Object)
)来将自己的SpringLayout.Constraints
对象与组件关联。
表示每个约束的Spring
对象具有最小、首选、最大和当前值。弹簧的当前值在最小值和最大值之间的某处,根据Spring.sum(javax.swing.Spring, javax.swing.Spring)
方法描述中给出的公式。当最小值、首选值和最大值相同时,当前值始终等于它们;这种不灵活的弹簧称为strut。您可以使用工厂方法Spring.constant(int)
创建struts。Spring
类还提供了用于创建其他类型弹簧的工厂方法,包括依赖于其他弹簧的弹簧。
在SpringLayout
中,每个边缘的位置取决于另一个边缘的位置。如果随后添加约束以为边缘创建新绑定,则将丢弃先前的绑定,边缘仍然依赖于单个边缘。弹簧应仅在容器的边缘和其直接子组件之间连接;当出现将来自不同容器(内部或外部)的组件边缘链接的约束时,SpringLayout
的行为是未定义的。
SpringLayout与其他布局管理器的比较
注意: 与许多布局管理器不同,SpringLayout
不会自动设置其管理的组件的位置。如果手动编写使用SpringLayout
的GUI,请记住通过约束西/东和北/南位置来初始化组件位置。根据您使用的约束,您可能还需要显式设置容器的大小。
尽管SpringLayout
的简单性可以模拟大多数其他布局管理器的行为。对于一些功能,例如FlowLayout
提供的换行,您需要创建Spring
类的特殊子类。
SpringLayout
还提供了一种解决许多无法通过嵌套Box
组合解决的复杂布局问题的方法。也就是说,SpringLayout
正确遵守LayoutManager2
协议,因此可以与其他布局管理器嵌套--这种技术可能比创建其他布局管理器隐含的约束更可取。
SpringLayout
的布局操作的渐近复杂度与约束(和/或组件)的数量成线性关系。
警告: 该类的序列化对象将与未来的Swing版本不兼容。当前的序列化支持适用于短期存储或在运行相同Swing版本的应用程序之间的RMI。从1.4版本开始,已将所有JavaBeans的长期存储支持添加到java.beans
包中。请参阅XMLEncoder
。
- 自1.4版本起:
- 参见:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Constraints
对象保存了控制组件在由SpringLayout
控制的容器中大小和位置变化的约束。 -
Field Summary
Modifier and TypeFieldDescriptionstatic final String
指定组件的基线。static final String
指定组件边界矩形的右边缘。static final String
指定组件边界矩形的高度。static final String
指定组件边界矩形的水平中心。static final String
指定组件边界矩形的顶部边缘。static final String
指定组件边界矩形的底部边缘。static final String
指定组件边界矩形的垂直中心。static final String
指定组件边界矩形的左边缘。static final String
指定组件边界矩形的宽度。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addLayoutComponent
(Component component, Object constraints) 如果constraints
是SpringLayout.Constraints
的一个实例,则将约束与指定的组件关联。void
addLayoutComponent
(String name, Component c) 由于此布局管理器不使用每个组件字符串,因此没有效果。getConstraint
(String edgeName, Component c) 返回控制组件指定边缘与其父顶部或左边缘之间距离的弹簧。返回指定组件的约束。float
返回0.5f(居中)。float
返回0.5f(居中)。void
使布局无效,表示如果布局管理器缓存了信息,则应丢弃该信息。void
layoutContainer
(Container parent) 对指定的容器进行布局。maximumLayoutSize
(Container parent) 计算给定其包含的组件的容器的最大尺寸维度。minimumLayoutSize
(Container parent) 计算给定其包含的组件的容器的最小尺寸维度。preferredLayoutSize
(Container parent) 计算给定其包含的组件的容器的首选尺寸维度。void
putConstraint
(String e1, Component c1, int pad, String e2, Component c2) 将组件c1
的边缘e1
与组件c2
的边缘e2
链接,两个边缘之间的距离固定。void
将组件c1
的边缘e1
与组件c2
的边缘e2
链接。void
删除与指定组件关联的约束。
-
Field Details
-
NORTH
指定组件边界矩形的顶部边缘。- 参见:
-
SOUTH
指定组件边界矩形的底部边缘。- 参见:
-
EAST
指定组件边界矩形的右边缘。- 参见:
-
WEST
指定组件边界矩形的左边缘。- 参见:
-
HORIZONTAL_CENTER
指定组件边界矩形的水平中心。- 自1.6版本起:
- 参见:
-
VERTICAL_CENTER
指定组件边界矩形的垂直中心。- 自1.6版本起:
- 参见:
-
BASELINE
指定组件的基线。- 自1.6版本起:
- 参见:
-
WIDTH
- 自1.6版本开始:
- 1.6
- 参见:
-
HEIGHT
指定组件边界矩形的高度。- 自1.6版本开始:
- 1.6
- 参见:
-
-
Constructor Details
-
SpringLayout
public SpringLayout()构造一个新的SpringLayout
。
-
-
Method Details
-
addLayoutComponent
无效果,因为此布局管理器不使用每个组件的字符串。- 指定者:
-
addLayoutComponent
在接口LayoutManager
- 参数:
-
name
- 与组件关联的字符串 -
c
- 要添加的组件
-
removeLayoutComponent
移除与指定组件关联的约束。- 指定者:
-
removeLayoutComponent
在接口LayoutManager
- 参数:
-
c
- 从容器中移除的组件
-
minimumLayoutSize
从接口复制的描述:LayoutManager
计算指定容器的最小尺寸维度,考虑其中包含的组件。- 指定者:
-
minimumLayoutSize
在接口LayoutManager
- 参数:
-
parent
- 要布局的组件 - 返回:
- 容器的最小尺寸
- 参见:
-
preferredLayoutSize
从接口复制的描述:LayoutManager
计算指定容器的首选大小维度,考虑其中包含的组件。- 指定者:
-
preferredLayoutSize
在接口LayoutManager
- 参数:
-
parent
- 要布局的容器 - 返回:
- 容器的首选尺寸
- 参见:
-
maximumLayoutSize
从接口复制的描述:LayoutManager2
计算指定容器的最大尺寸维度,考虑其中包含的组件。- 指定者:
-
maximumLayoutSize
在接口LayoutManager2
- 参数:
-
parent
- 目标容器 - 返回:
- 容器的最大尺寸
- 参见:
-
addLayoutComponent
如果constraints
是SpringLayout.Constraints
的实例,则将约束与指定组件关联。- 指定者:
-
addLayoutComponent
在接口LayoutManager2
- 参数:
-
component
- 要添加的组件 -
constraints
- 组件的约束 - 参见:
-
getLayoutAlignmentX
返回0.5f(居中)。- 指定者:
-
getLayoutAlignmentX
在接口LayoutManager2
- 参数:
-
p
- 目标容器 - 返回:
- x轴对齐偏好
-
getLayoutAlignmentY
返回0.5f(居中)。- 指定者:
-
getLayoutAlignmentY
在接口LayoutManager2
- 参数:
-
p
- 目标容器 - 返回:
- y轴对齐偏好
-
invalidateLayout
从接口复制的描述:LayoutManager2
使布局无效,表示如果布局管理器缓存了信息,则应丢弃它。- 指定者:
-
invalidateLayout
在接口LayoutManager2
- 参数:
-
p
- 目标容器
-
putConstraint
将组件c1
的边缘e1
链接到组件c2
的边缘e2
,边缘之间有固定距离。此约束将导致在所有后续布局操作期间执行赋值value(e1, c1) = value(e2, c2) + pad
- 参数:
-
e1
- 依赖项的边缘 -
c1
- 依赖项的组件 -
pad
- 依赖项和锚点之间的固定距离 -
e2
- 锚点的边缘 -
c2
- 锚点的组件 - 参见:
-
putConstraint
将组件c1
的边缘e1
链接到组件c2
的边缘e2
。随着边缘(e2, c2)
的值变化,边缘(e1, c1)
将通过取(e2, c2)
和s
的(弹簧)总和来计算。每个边缘必须具有以下值之一:SpringLayout.NORTH
、SpringLayout.SOUTH
、SpringLayout.EAST
、SpringLayout.WEST
、SpringLayout.VERTICAL_CENTER
、SpringLayout.HORIZONTAL_CENTER
或SpringLayout.BASELINE
。- 参数:
-
e1
- 依赖项的边缘 -
c1
- 依赖项的组件 -
s
- 链接依赖项和锚点的弹簧 -
e2
- 锚点的边缘 -
c2
- 锚点的组件 - 参见:
-
getConstraints
返回指定组件的约束。请注意,与GridBagLayout
的getConstraints
方法不同,此方法不会克隆约束。如果没有将约束与此组件关联,则此方法将返回一个默认约束对象,其位置相对于父级的Insets为0,0,宽度/高度受限于组件的最小、最大和首选大小。在调用此方法时,尺寸特性不会被冻结;而是返回一个约束对象,其特性跟踪组件的特性随着其变化而变化。- 参数:
-
c
- 将返回其约束的组件 - 返回:
- 指定组件的约束
-
getConstraint
返回控制组件边缘与其父级顶部或左侧边缘之间距离的弹簧。该方法不返回边缘的当前绑定,而是返回一个代理,即使边缘随后重新绑定,代理也会跟踪边缘的特性。代理旨在在构建器环境中使用,允许用户以任何顺序定义布局的约束条件。但是,代理提供了在布局的约束条件之间创建循环依赖的手段。这种循环会被SpringLayout
在内部检测到,以便布局操作始终终止。- 参数:
-
edgeName
- 必须是SpringLayout.NORTH
、SpringLayout.SOUTH
、SpringLayout.EAST
、SpringLayout.WEST
、SpringLayout.VERTICAL_CENTER
、SpringLayout.HORIZONTAL_CENTER
或SpringLayout.BASELINE
之一 -
c
- 要获取其边缘弹簧的组件 - 返回:
- 控制指定边缘与其父级顶部或左侧边缘之间距离的弹簧的代理
- 参见:
-
layoutContainer
从接口复制的描述:LayoutManager
对指定的容器进行布局。- 指定者:
-
layoutContainer
在接口LayoutManager
- 参数:
-
parent
- 要进行布局的容器
-