Module  java.desktop
软件包  javax.swing

Class SpringLayout

  • All Implemented Interfaces:
    LayoutManagerLayoutManager2


    public class SpringLayout
    extends Object
    implements LayoutManager2
    A SpringLayout根据一组约束规定了其关联容器的子项。 How to Use SpringLayout的Java教程使用的例子SpringLayout

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

    SpringLayout控制的容器的每个孩子以及容器本身都具有与之相关的一组限制。 这些约束由一个SpringLayout.Constraints对象表示。 默认情况下, SpringLayout产生约束,使他们的相关组件具有最小,首选,和组件的最大返回大小Component.getMinimumSize()Component.getPreferredSize() ,并Component.getMaximumSize()方法。 xy位置最初不受约束,因此在限制它们之前, Component将位于相对于父母ContainerInsets的0,0。

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

    表示每个约束的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的组合来解决。 SpringLayoutLayoutManager2

    SpringLayout的布局操作的渐近复杂度在约束(和/或组件)的数量上是线性的。

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

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

      • HORIZONTAL_CENTER

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

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

        public static final String BASELINE
        指定组件的基线。
        从以下版本开始:
        1.6
        另请参见:
        Constant Field Values
      • WIDTH

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

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

      • 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.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