- java.lang.Object
-
- javax.swing.SpringLayout
-
- 实现的所有接口
-
LayoutManager
,LayoutManager2
public class SpringLayout extends Object implements LayoutManager2
SpringLayout
根据一组约束条件列出其相关容器的子项。 见How to Use SpringLayout在Java教程使用的例子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
获取组件特定边缘的弹簧,并对其进行修改。 通过在将组件添加到其容器时指定约束对象,您还可以将自己的SpringLayout.Constraints
对象与组件关联(使用Container.add(Component, Object)
)。表示每个约束的
Spring
对象具有最小值,首选值,最大值和当前值。 根据Spring.sum(javax.swing.Spring, javax.swing.Spring)
方法描述中给出的公式,弹簧的当前值介于最小值和最大值之间。 当最小值,首选值和最大值相同时,当前值总是等于它们; 这种不灵活的弹簧称为支柱 。 您可以使用工厂方法Spring.constant(int)
创建支柱。Spring
类还提供了用于创建其他类型弹簧的工厂方法,包括依赖于其他弹簧的弹簧。在
SpringLayout
,每条边的位置取决于另一条边的位置。 如果随后添加约束以为边创建新绑定,则先前的绑定将被丢弃,并且边仍然依赖于单个边。 弹簧应仅安装在容器边缘及其直接儿童之间;SpringLayout
在显示链接来自不同容器(内部或外部)的组件边缘的约束时的行为未定义。SpringLayout与其他布局管理器
Note: Unlike many layout managers,SpringLayout
doesn't automatically set the location of the components it manages. If you hand-code a GUI that usesSpringLayout
, remember to initialize component locations by constraining the west/east and north/south locations.Depending on the constraints you use, you may also need to set the size of the container explicitly.
尽管
SpringLayout
很简单,但它可以模拟大多数其他布局管理器的行为。 对于某些功能,例如FlowLayout
提供的FlowLayout
,您需要创建Spring
类的特殊用途子类。SpringLayout
还提供了一种解决许多难以解决的布局问题的方法,这些问题无法通过嵌套Box
es的组合来解决。 也就是说,SpringLayout
正确地尊重了LayoutManager2
合同,因此可以与其他布局管理器嵌套 - 这种技术可以优先于创建其他布局管理器隐含的约束。SpringLayout
的布局操作的渐近复杂度在约束(和/或组件)的数量上是线性的。警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始,
java.beans
软件包中添加了对所有JavaBeansjava.beans
长期存储的支持。 请参阅XMLEncoder
。- 从以下版本开始:
- 1.4
- 另请参见:
-
Spring
,SpringLayout.Constraints
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 static class
SpringLayout.Constraints
Constraints
对象包含约束,这些约束控制组件的大小和位置在由SpringLayout
控制的容器中的SpringLayout
。
-
字段汇总
字段 变量和类型 字段 描述 static String
BASELINE
指定组件的基线。static String
EAST
指定组件边界矩形的右边缘。static String
HEIGHT
指定组件边界矩形的高度。static String
HORIZONTAL_CENTER
指定组件边界矩形的水平中心。static String
NORTH
指定组件边界矩形的上边缘。static String
SOUTH
指定组件边界矩形的下边缘。static String
VERTICAL_CENTER
指定组件边界矩形的垂直中心。static String
WEST
指定组件边界矩形的左边缘。static String
WIDTH
指定组件边界矩形的宽度。
-
构造方法摘要
构造方法 构造器 描述 SpringLayout()
构造一个新的SpringLayout
。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 void
addLayoutComponent(Component component, Object constraints)
如果constraints
是constraints
的实例,SpringLayout.Constraints
约束与指定的组件相关联。void
addLayoutComponent(String name, Component c)
没有效果,因为此布局管理器不使用每个组件的字符串。Spring
getConstraint(String edgeName, Component c)
返回控制组件指定边缘与其父级顶部或左侧边缘之间距离的弹簧。SpringLayout.Constraints
getConstraints(Component c)
返回指定组件的约束。float
getLayoutAlignmentX(Container p)
返回0.5f(居中)。float
getLayoutAlignmentY(Container p)
返回0.5f(居中)。void
putConstraint(String e1, Component c1, int pad, String e2, Component c2)
链接边缘e1
组分c1
到边缘e2
成分的c2
,边与边之间的距离固定。void
putConstraint(String e1, Component c1, Spring s, String e2, Component c2)
链接边缘e1
组分c1
到边缘e2
组分c2
。void
removeLayoutComponent(Component c)
删除与指定组件关联的约束。-
声明方法的类 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
声明方法的接口 java.awt.LayoutManager
layoutContainer, minimumLayoutSize, preferredLayoutSize
-
声明方法的接口 java.awt.LayoutManager2
invalidateLayout, maximumLayoutSize
-
-
-
-
方法详细信息
-
addLayoutComponent
public void addLayoutComponent(String name, Component c)
没有效果,因为此布局管理器不使用每个组件的字符串。- Specified by:
-
addLayoutComponent
在界面LayoutManager
- 参数
-
name
- 与组件关联的字符串 -
c
- 要添加的组件
-
removeLayoutComponent
public void removeLayoutComponent(Component c)
删除与指定组件关联的约束。- Specified by:
-
removeLayoutComponent
在界面LayoutManager
- 参数
-
c
- 从容器中删除的组件
-
addLayoutComponent
public void addLayoutComponent(Component component, Object constraints)
如果constraints
是constraints
的实例,SpringLayout.Constraints
约束与指定的组件相关联。- Specified by:
-
addLayoutComponent
在界面LayoutManager2
- 参数
-
component
- 正在添加的组件 -
constraints
- 组件的约束 - 另请参见:
-
SpringLayout.Constraints
-
getLayoutAlignmentX
public float getLayoutAlignmentX(Container p)
返回0.5f(居中)。- Specified by:
-
getLayoutAlignmentX
在界面LayoutManager2
- 参数
-
p
- 目标容器 - 结果
- x轴对齐偏好
-
getLayoutAlignmentY
public float getLayoutAlignmentY(Container p)
返回0.5f(居中)。- Specified by:
-
getLayoutAlignmentY
接口LayoutManager2
- 参数
-
p
- 目标容器 - 结果
- y轴对齐偏好
-
putConstraint
public void putConstraint(String e1, Component c1, int pad, String e2, Component c2)
链接边缘e1
组分c1
到边缘e2
成分的c2
,边与边之间的距离固定。 此约束将导致分配value(e1, c1) = value(e2, c2) + pad
在所有后续布局操作中进行。- 参数
-
e1
- 依赖的边缘 -
c1
- 从属组件 -
pad
- 从属和锚之间的固定距离 -
e2
- 锚点的边缘 -
c2
- 锚点的组件 - 另请参见:
-
putConstraint(String, Component, Spring, String, Component)
-
putConstraint
public void putConstraint(String e1, Component c1, Spring s, String e2, Component c2)
链接边缘e1
组分c1
到边缘e2
组分c2
。 为边缘(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
- 锚点的组件 - 另请参见:
-
putConstraint(String, Component, int, String, Component)
,NORTH
,SOUTH
,EAST
,WEST
,VERTICAL_CENTER
,HORIZONTAL_CENTER
,BASELINE
-
getConstraints
public SpringLayout.Constraints getConstraints(Component c)
返回指定组件的约束。 请注意,与GridBagLayout
getConstraints
方法不同,此方法不会克隆约束。 如果没有与此组件关联的约束,则此方法返回默认约束对象,该对象相对于父级的Insets位于0,0,并且其宽度/高度约束为组件的最小,最大和首选大小。 调用此方法时,大小特征不会冻结; 相反,此方法返回一个约束对象,其特征跟踪组件更改时的特征。- 参数
-
c
- 将返回其约束的组件 - 结果
- 指定组件的约束
-
getConstraint
public Spring getConstraint(String edgeName, Component c)
返回控制组件指定边缘与其父级顶部或左侧边缘之间距离的弹簧。 此方法不是返回边缘的当前绑定,而是返回跟踪边缘特征的代理,即使边缘随后被反弹也是如此。 代理旨在用于构建器环境,其中允许用户以任何顺序定义布局的约束是有用的。 但是,代理提供了在布局约束中创建循环依赖关系的方法。 这些循环由SpringLayout
在内部检测,因此布局操作始终终止。- 参数
-
edgeName
-必须之一SpringLayout.NORTH
,SpringLayout.SOUTH
,SpringLayout.EAST
,SpringLayout.WEST
,SpringLayout.VERTICAL_CENTER
,SpringLayout.HORIZONTAL_CENTER
或SpringLayout.BASELINE
-
c
- 需要边缘弹簧的组件 - 结果
- 弹簧的代理控制指定边缘与其父边缘或左边缘之间的距离
- 另请参见:
-
NORTH
,SOUTH
,EAST
,WEST
,VERTICAL_CENTER
,HORIZONTAL_CENTER
,BASELINE
-
-