所有类


javax.swing
类 SpringLayout

java.lang.Object
  继承者 javax.swing.SpringLayout
所有已实现的接口:
LayoutManager, LayoutManager2

public class SpringLayout
   
   
   
   
extends Object
implements LayoutManager2

SpringLayout 根据一组约束布置其相关容器的子组件。有关使用 SpringLayout 的示例,请参阅《The Java Tutorial》中的 How to Use SpringLayout 一节。

每个由 Spring 对象表示的约束控制着两个组件边之间的垂直距离或水平距离。这两个边属于容器的任一子级,或属于该容器本身。例如,可以使用控制某组件东(右)和西(左)边之间距离的约束表示该组件允许的宽度。某个组件所允许的 y 坐标可以通过约束该组件北(上)边和其容器的北边之间的距离表示。

SpringLayout 控制的容器的每个子级及其容器本身都有一组与其相关的约束。这些约束由一个 SpringLayout.Constraints 对象表示。默认情况下,SpringLayout 创建使其相关组件具有最小、首选和最大大小的约束,这几项大小都由该组件的 Component.getMinimumSize()Component.getPreferredSize()Component.getMaximumSize() 方法返回。xy 的位置最初不受约束,以便在约束它们之前将该 Component 定位在对应于父 ContainerInsets 的 0,0 位置。

有好几种可以更改组件约束的方式。可以使用某个 putConstraint 方法建立一个连接同一个容器内两个组件边的 spring。或者使用 getConstraints 获取适当 SpringLayout.Constraints,然后修改其中一个或多个 spring。或者使用 getConstraint 获取某个组件特定边的 spring,并修改它。还可以在将某个组件添加到其容器(使用 Container.add(Component, Object))时,通过指定自己的 SpringLayout.Constraints 对象,将该约束对象与该组件相关联。

表示每项约束的 Spring 对象都有最小、首选、最大和当前值。按照 Spring.sum(javax.swing.Spring, javax.swing.Spring) 方法描述中给定的公式,该 spring 的当前值介于最小值和最大值之间的某个位置。当最小、首选和最大值相同时,当前值始终与它们相等;此不灵活的 spring 被称作 strut。可以使用工厂方法 Spring.constant(int) 创建 strut。该 Spring 类还提供工厂方法,用于创建其他种类的 spring,包括依赖其他 spring 的 spring。

SpringLayout 中,每个边的位置只与其他一个边的位置有关。如果随后添加一个约束来创建某个边的新绑定,则以前的绑定会被丢弃,且该边保持与某单个边相关。Spring 只应在容器的两个边及其直接子级之间连接;当出现连接到不同容器(内部或外部)中组件边缘的约束时,该 SpringLayout 的行为是不确定的。

SpringLayout 与其他布局管理器的比较


注:与多数布局管理器不同,SpringLayout 不自动设置它管理的组件的位置。如果手工编写一个使用 SpringLayout 的 GUI,则要记住通过约束东/西和南/北的位置初始化组件的位置。

可能还需要明确设置容器的大小,具体取决于您使用的约束。


尽管 SpringLayout 简单易用,但它还要仿效其他多数布局管理器的行为。对于某些功能(如 FlowLayout 提供的行断开),需要创建一个 Spring 类的专用子类。

SpringLayout 还提供解决许多困难布局问题的方法,这些问题都不能通过嵌套 Box 的组合来解决。也就是说,SpringLayout 完全遵守 LayoutManager2 协定,因此可以使用其他布局管理器进行嵌套(一种创建其他布局管理器使用的约束的更好技术)。

SpringLayout 布局操作的渐进复杂性与约束(和/或组件)的数量呈线关系。

警告:此类的序列化对象将与以后的 Swing 版本不兼容。当前的序列化支持适用于短期存储或运行相同 Swing 版本的应用程序之间的 RMI。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder

从以下版本开始:
1.4
另请参见:
Spring, SpringLayout.Constraints

嵌套类摘要
static classSpringLayout.Constraints
          Constraints 对象将管理组件大小和位置更改方式的约束存储在 SpringLayout 控制的容器中。
 
字段摘要
static StringEAST
          指定组件的边界矩形的右边。
static StringNORTH
          指定组件的边界矩形的顶边。
static StringSOUTH
          指定组件的边界矩形的底边。
static StringWEST
          指定组件的边界矩形的左边。
 
构造方法摘要
SpringLayout()
          构造一个新 SpringLayout
 
方法摘要
 voidaddLayoutComponent(Component component, Object constraints)
          如果 constraintsSpringLayout.Constraints 的一个实例,则将该约束与指定组件相关联。
 voidaddLayoutComponent(String name, Component c)
          无效,因为此布局管理器不使用每组件字符串。
 SpringgetConstraint(String edgeName, Component c)
          返回控制该组件指定边及其父级的顶边或左边之间距离的 spring。
 SpringLayout.ConstraintsgetConstraints(Component c)
          返回指定组件的约束。
 floatgetLayoutAlignmentX(Container p)
          返回 0.5f(居中)。
 floatgetLayoutAlignmentY(Container p)
          返回 0.5f(居中)。
 voidinvalidateLayout(Container p)
          使布局失效,指示如果布局管理器缓存了信息,则应该将其丢弃。
 voidlayoutContainer(Container parent)
          布置指定容器。
 DimensionmaximumLayoutSize(Container parent)
          给定指定容器的组件,计算该容器的最大大小维数。
 DimensionminimumLayoutSize(Container parent)
          给定指定容器所包含的组件,计算该容器的最小大小维数。
 DimensionpreferredLayoutSize(Container parent)
          给定指定容器所包含的组件,计算该容器的首选大小维数。
 voidputConstraint(String e1, Component c1, int pad, String e2, Component c2)
          将组件 c1 的边 e1 连接到组件 c2 的边 e2,边与边之间的距离固定。
 voidputConstraint(String e1, Component c1, Spring s, String e2, Component c2)
          将组件 c1 的边 e1 连接到组件 c2 的边 e2
 voidremoveLayoutComponent(Component c)
          移除与指定组件相关的约束。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

NORTH

public static final String NORTH
指定组件的边界矩形的顶边。

另请参见:
常量字段值

SOUTH

public static final String SOUTH
指定组件的边界矩形的底边。

另请参见:
常量字段值

EAST

public static final String EAST
指定组件的边界矩形的右边。

另请参见:
常量字段值

WEST

public static final String WEST
指定组件的边界矩形的左边。

另请参见:
常量字段值
构造方法详细信息

SpringLayout

public SpringLayout()
构造一个新 SpringLayout

方法详细信息

addLayoutComponent

public void addLayoutComponent(String name,
                               Component c)
无效,因为此布局管理器不使用每组件字符串。

指定者:
接口 LayoutManager 中的 addLayoutComponent
参数:
name - 要与组件关联的字符串
c - 要添加的组件

removeLayoutComponent

public void removeLayoutComponent(Component c)
移除与指定组件相关的约束。

指定者:
接口 LayoutManager 中的 removeLayoutComponent
参数:
c - 将从容器中移除的组件