- 所有已实现的接口:
-
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
Nested ClassesModifier and TypeClassDescriptionstatic classConstraints对象保存了控制组件在由SpringLayout控制的容器中大小和位置变化的约束。 -
Field Summary
FieldsModifier 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
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddLayoutComponent(Component component, Object constraints) 如果constraints是SpringLayout.Constraints的一个实例,则将约束与指定的组件关联。voidaddLayoutComponent(String name, Component c) 由于此布局管理器不使用每个组件字符串,因此没有效果。getConstraint(String edgeName, Component c) 返回控制组件指定边缘与其父顶部或左边缘之间距离的弹簧。返回指定组件的约束。float返回0.5f(居中)。float返回0.5f(居中)。void使布局无效,表示如果布局管理器缓存了信息,则应丢弃该信息。voidlayoutContainer(Container parent) 对指定的容器进行布局。maximumLayoutSize(Container parent) 计算给定其包含的组件的容器的最大尺寸维度。minimumLayoutSize(Container parent) 计算给定其包含的组件的容器的最小尺寸维度。preferredLayoutSize(Container parent) 计算给定其包含的组件的容器的首选尺寸维度。voidputConstraint(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- 要进行布局的容器
-