模块  java.desktop
软件包  javax.swing

Class SpringLayout

  • 实现的所有接口
    LayoutManagerLayoutManager2

    public class SpringLayout
    extends Object
    implements LayoutManager2
    SpringLayout根据一组约束条件列出其相关容器的子项。 How to Use SpringLayoutJava教程使用的例子SpringLayout

    Spring对象表示的每个约束控制两个组件边缘之间的垂直或水平距离。 边可以属于容器的任何子节点,也可以属于容器本身。 例如,可以使用控制组件的西(左)和东(右)边缘之间的距离的约束来表示组件的可允许宽度。 组件的允许y坐标可以通过约束组件的北(顶)边缘与其容器的北边缘之间的距离来表示。

    SpringLayout控制容器的每个子容器以及容器本身都只有一组与之相关的约束。 这些约束由SpringLayout.Constraints对象表示。 默认情况下, SpringLayout产生约束,使他们的相关组件具有最小,首选,和组件的最大返回大小Component.getMinimumSize()Component.getPreferredSize()Component.getMaximumSize()方法。 xy位置最初不受约束,因此在约束它们之前, Component将相对于父级ContainerInsets定位在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 uses SpringLayout, 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软件包中添加了对所有JavaBeans java.beans长期存储的支持。 请参阅XMLEncoder

    从以下版本开始:
    1.4
    另请参见:
    SpringSpringLayout.Constraints
    • 字段详细信息

      • NORTH

        public static final String NORTH
        指定组件边界矩形的上边缘。
        另请参见:
        常数字段值
      • SOUTH

        public static final String SOUTH
        指定组件边界矩形的下边缘。
        另请参见:
        常数字段值
      • EAST

        public static final String EAST
        指定组件边界矩形的右边缘。
        另请参见:
        常数字段值
      • WEST

        public static final String WEST
        指定组件边界矩形的左边缘。
        另请参见:
        常数字段值
      • HORIZONTAL_CENTER

        public static final String HORIZONTAL_CENTER
        指定组件边界矩形的水平中心。
        从以下版本开始:
        1.6
        另请参见:
        常数字段值
      • VERTICAL_CENTER

        public static final String VERTICAL_CENTER
        指定组件边界矩形的垂直中心。
        从以下版本开始:
        1.6
        另请参见:
        常数字段值
      • BASELINE

        public static final String BASELINE
        指定组件的基线。
        从以下版本开始:
        1.6
        另请参见:
        常数字段值
      • WIDTH

        public static final String WIDTH
        指定组件边界矩形的宽度。
        从以下版本开始:
        1.6
        另请参见:
        常数字段值
      • HEIGHT

        public static final String HEIGHT
        指定组件边界矩形的高度。
        从以下版本开始:
        1.6
        另请参见:
        常数字段值
    • 构造方法详细信息

      • SpringLayout

        public SpringLayout()
        构造一个新的 SpringLayout
    • 方法详细信息

      • addLayoutComponent

        public void addLayoutComponent​(String name,
                                       Component c)
        没有效果,因为此布局管理器不使用每个组件的字符串。
        Specified by:
        addLayoutComponent在界面 LayoutManager
        参数
        name - 与组件关联的字符串
        c - 要添加的组件
      • addLayoutComponent

        public void addLayoutComponent​(Component component,
                                       Object constraints)
        如果 constraintsconstraints的实例, SpringLayout.Constraints约束与指定的组件相关联。
        Specified by:
        addLayoutComponent在界面 LayoutManager2
        参数
        component - 正在添加的组件
        constraints - 组件的约束
        另请参见:
        SpringLayout.Constraints
      • 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.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERSpringLayout.BASELINE
        参数
        e1 - 依赖的边缘
        c1 - 从属组件
        s - 连接依赖和锚的弹簧
        e2 - 锚点的边缘
        c2 - 锚点的组件
        另请参见:
        putConstraint(String, Component, int, String, Component)NORTHSOUTHEASTWESTVERTICAL_CENTERHORIZONTAL_CENTERBASELINE
      • getConstraints

        public SpringLayout.Constraints getConstraints​(Component c)
        返回指定组件的约束。 请注意,与GridBagLayout getConstraints方法不同,此方法不会克隆约束。 如果没有与此组件关联的约束,则此方法返回默认约束对象,该对象相对于父级的Insets位于0,0,并且其宽度/高度约束为组件的最小,最大和首选大小。 调用此方法时,大小特征不会冻结; 相反,此方法返回一个约束对象,其特征跟踪组件更改时的特征。
        参数
        c - 将返回其约束的组件
        结果
        指定组件的约束
      • getConstraint

        public Spring getConstraint​(String edgeName,
                                    Component c)
        返回控制组件指定边缘与其父级顶部或左侧边缘之间距离的弹簧。 此方法不是返回边缘的当前绑定,而是返回跟踪边缘特征的代理,即使边缘随后被反弹也是如此。 代理旨在用于构建器环境,其中允许用户以任何顺序定义布局的约束是有用的。 但是,代理提供了在布局约束中创建循环依赖关系的方法。 这些循环由SpringLayout在内部检测,因此布局操作始终终止。
        参数
        edgeName -必须之一 SpringLayout.NORTHSpringLayout.SOUTHSpringLayout.EASTSpringLayout.WESTSpringLayout.VERTICAL_CENTERSpringLayout.HORIZONTAL_CENTERSpringLayout.BASELINE
        c - 需要边缘弹簧的组件
        结果
        弹簧的代理控制指定边缘与其父边缘或左边缘之间的距离
        另请参见:
        NORTHSOUTHEASTWESTVERTICAL_CENTERHORIZONTAL_CENTERBASELINE