Module  java.desktop
软件包  javax.swing

Class GroupLayout

  • All Implemented Interfaces:
    LayoutManagerLayoutManager2


    public class GroupLayout
    extends Object
    implements LayoutManager2
    GroupLayout是一个LayoutManager ,用于对组件进行分层分组,以便将它们放置在一个Container GroupLayout旨在供建筑商使用,但也可以手工编码。 分组是由Group类的实例完成的。 GroupLayout支持两种类型的组。 一个顺序组按顺序依次定位其子元素。 并行组以四种方式之一对齐其子元素。

    每个组可包含任意数量的元素,其中的元素是GroupComponent ,或间隙。 间隙可以被认为是具有最小,优选和最大尺寸的不可见成分。 此外, GroupLayout支持优先缺口,其值来自LayoutStyle

    元素类似于春天。 每个元素具有由最小值,优选值和最大值指定的范围。 间隙具有开发者指定的范围,或由LayoutStyle确定的范围。 范围为Component S从确定ComponentgetMinimumSizegetPreferredSizegetMaximumSize方法。 另外,当添加Component s时,您可以指定要使用的特定范围而不是组件的范围。 Group的范围由组的类型决定。 ParallelGroup的范围是其元素范围的最大值。 SequentialGroup的范围是其元素范围的总和。

    GroupLayout独立对待每个轴。 也就是说,存在表示水平轴的组和表示垂直轴的组。 水平组负责确定沿水平轴的最小尺寸,优选尺寸和最大尺寸,以及设置其中包含的组件的x和宽度。 垂直组负责确定沿垂直轴的最小尺寸,最小尺寸和最大尺寸,以及设置其中包含的组件的y和高度。 每个Component必须存在于水平和垂直组中,否则在布局期间抛出IllegalStateException ,或者要求最小,优选或最大大小时。

    下图显示沿水平轴的顺序组。 顺序组包含三个组件。 沿垂直轴使用平行组。

    顺序组沿水平轴三个组成部分

    为了加强每个轴的独立处理,该图显示了每个轴和每个轴上的每个组的范围。 每个组件的范围已投影到轴上,组将呈现为蓝色(水平)和红色(垂直)。 为了可读性,顺序组中的每个元素之间存在间隙。

    沿着水平轴的顺序组呈现为实线蓝线。 注意顺序组是它包含的子元素的总和。

    沿着垂直轴,平行组是每个部件的最大高度。 由于所有三个部件具有相同的高度,平行组具有相同的高度。

    下图显示了相同的三个组件,但沿着水平轴的平行组和沿垂直轴的顺序组。

    沿垂直轴的顺序组在三个组件中

    由于c1是三个组件中最大的,并行组的大小为c1 由于c2c3小于c1它们将基于为组件(如果指定)指定的对齐方式或并行组的默认对齐方式对齐。 在图c2c3中创建的对齐方式为LEADING 如果组件方向从右到左,则c2c3将位于相对侧。

    下图显示了沿水平轴和垂直轴的顺序组。

    沿着水平轴和垂直轴的顺序组在三个分量中

    GroupLayout提供了在Component之间插入间隙的能力。 差距的大小由LayoutStyle的实例确定。 这可以使用setAutoCreateGaps方法打开。 类似地,您可以使用setAutoCreateContainerGaps方法在接触父容器和容器边缘的组件之间插入间隙。

    以下构建一个由一列中的两个标签组成的面板,后面是两列文本框:

      JComponent panel = ...;
       GroupLayout layout = new GroupLayout(panel);
       panel.setLayout(layout);
    
       // Turn on automatically adding gaps between components
       layout.setAutoCreateGaps(true);
    
       // Turn on automatically creating gaps between components that touch
       // the edge of the container and the container.
       layout.setAutoCreateContainerGaps(true);
    
       // Create a sequential group for the horizontal axis.
    
       GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
    
       // The sequential group in turn contains two parallel groups.
       // One parallel group contains the labels, the other the text fields.
       // Putting the labels in a parallel group along the horizontal axis
       // positions them at the same x location.
       //
       // Variable indentation is used to reinforce the level of grouping.
       hGroup.addGroup(layout.createParallelGroup().
                addComponent(label1).addComponent(label2));
       hGroup.addGroup(layout.createParallelGroup().
                addComponent(tf1).addComponent(tf2));
       layout.setHorizontalGroup(hGroup);
    
       // Create a sequential group for the vertical axis.
       GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
    
       // The sequential group contains two parallel groups that align
       // the contents along the baseline. The first parallel group contains
       // the first label and text field, and the second parallel group contains
       // the second label and text field. By using a sequential group
       // the labels and text fields are positioned vertically after one another.
       vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(label1).addComponent(tf1));
       vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(label2).addComponent(tf2));
       layout.setVerticalGroup(vGroup); 

    运行时产生以下内容。

    生产水平/垂直形式

    此布局包括以下内容。

    • 横轴由包含两个并行组的连续组组成。 第一个并行组包含标签,第二个并行组包含文本字段。
    • 垂直轴由包含两个平行组的顺序组成。 这些并行组被配置成沿着基线对准其组件。 第一个并行组包含第一个标签和第一个文本字段,第二个组由第二个标签和第二个文本字段组成。
    这段代码中有几件事要注意:
    • 您不需要明确地将组件添加到容器中; 这是间接通过使用add方法之一的Group
    • 各种add方法返回调用者。 这样可以方便地链接调用。 例如, group.addComponent(label1).addComponent(label2);相当于group.addComponent(label1); group.addComponent(label2);
    • 没有公共建设者Group s; 而是使用create方法GroupLayout
    从以下版本开始:
    1.6
    • 构造方法详细信息

      • GroupLayout

        public GroupLayout​(Container host)
        创建 GroupLayout为指定 Container
        参数
        host - ContainerGroupLayoutLayoutManager
        异常
        IllegalArgumentException - 如果主机是 null
    • 方法详细信息

      • setHonorsVisibility

        public void setHonorsVisibility​(boolean honorsVisibility)
        设置在组件尺寸和定位时是否考虑组件可见性。 值为true表示不可见组件不应被视为布局的一部分。 值为false表示组件应定位和大小,而不管可见性如何。

        当动态调整组件的可见性,并且不希望使用周围组件和大小调整时,值为false值很有用。

        指定的值用于没有指定明确可见性的组件。

        默认值为true

        参数
        honorsVisibility - 在确定组件尺寸和定位时是否考虑组件可见性
        另请参见:
        setHonorsVisibility(Component,Boolean)
      • getHonorsVisibility

        public boolean getHonorsVisibility​()
        返回在确定组件的大小和位置时是否考虑组件可见性。
        结果
        组件的尺寸和定位是否考虑组件的可视性
      • setHonorsVisibility

        public void setHonorsVisibility​(Component component,
                                        Boolean honorsVisibility)
        设置组件的可见性是否考虑到尺寸和定位。 Boolean.TRUE表示如果component不可见,则不应将其视为布局的一部分。 值为false表示component的位置和大小,无论其可见性如何。 null表示应该使用单参数方法指定的值setHonorsVisibility

        如果component不是Container这个GroupLayout正在管理的孩子,它将被添加到Container

        参数
        component - 组件
        honorsVisibility - 是否应考虑此 component的尺寸和定位的可见性
        异常
        IllegalArgumentException - 如果 componentnull
        另请参见:
        setHonorsVisibility(Component,Boolean)
      • setAutoCreateGaps

        public void setAutoCreateGaps​(boolean autoCreatePadding)
        设置是否自动创建组件之间的间隙。 例如,如果这是true并且您将两个组件添加到一个SequentialGroup则会自动创建两个组件之间的间隙。 默认值为false
        参数
        autoCreatePadding - 是否自动创建组件之间的间隙
      • getAutoCreateGaps

        public boolean getAutoCreateGaps​()
        如果组件之间的间隙自动创建,则返回 true
        结果
        true如果组件之间的间隙自动创建
      • setAutoCreateContainerGaps

        public void setAutoCreateContainerGaps​(boolean autoCreateContainerPadding)
        设置是否自动创建容器和组件之间接触容器边界的间隙。 默认值为false
        参数
        autoCreateContainerPadding - 是否应自动创建容器和组件之间接触容器边界的间隙
      • getAutoCreateContainerGaps

        public boolean getAutoCreateContainerGaps​()
        如果自动创建容器和容器边界的组件之间的间隙,则返回 true
        结果
        true如果容器和与容器之间的组件之间的间隙自动创建
      • setHorizontalGroup

        public void setHorizontalGroup​(GroupLayout.Group group)
        设置 Group位置和大小沿水平轴的组件。
        参数
        group - 沿着水平轴位置和大小的部件的 Group
        异常
        IllegalArgumentException - 如果组是 null
      • setVerticalGroup

        public void setVerticalGroup​(GroupLayout.Group group)
        设置 Group位置和尺寸沿垂直轴的部件。
        参数
        group - Group这些位置和大小沿垂直轴的部件
        异常
        IllegalArgumentException - 如果组是 null
      • createSequentialGroup

        public GroupLayout.SequentialGroup createSequentialGroup​()
        创建并返回一个 SequentialGroup
        结果
        一个新的 SequentialGroup
      • createParallelGroup

        public GroupLayout.ParallelGroup createParallelGroup​()
        创建并返回ParallelGroup ,对齐方式为Alignment.LEADING 这是一种更为普遍的createParallelGroup(Alignment)方法的覆盖方法。
        结果
        一个新的 ParallelGroup
        另请参见:
        createParallelGroup(Alignment)
      • createParallelGroup

        public GroupLayout.ParallelGroup createParallelGroup​(GroupLayout.Alignment alignment,
                                                             boolean resizable)
        创建并返回具有指定对齐和调整大小行为的ParallelGroup alignment参数指定如何定位未填充组的子元素。 例如,如果一个ParallelGroup用的对准TRAILING给出100和子只需要50,子被定位在位置50(具有一个组件方向左到右)。

        基线对齐仅在沿垂直轴使用时有用。 使用沿水平轴的基线对齐创建的ParallelGroup被视为LEADING

        有关基准组的行为的详细信息,请参阅ParallelGroup

        参数
        alignment - 组的元素的对齐
        resizable - true如果组可调整大小; 如果组不可调整,则优选大小用于组的最小和最大大小
        结果
        一个新的 ParallelGroup
        异常
        IllegalArgumentException - 如果 alignmentnull
        另请参见:
        createBaselineGroup(boolean, boolean)GroupLayout.ParallelGroup
      • linkSize

        public void linkSize​(Component... components)
        强制指定的组件具有相同的大小,无论其首选,最小或最大大小如何。 链接的组件被赋予每个链接组件的首选大小的最大值。 例如,如果将两个组件的首选宽度为10和20相连,则两个组件的宽度为20。

        这可以多次使用来强制任意数量的组件共享相同的大小。

        链接的组件不可调整大小。

        参数
        components - 要具有相同大小的 Component
        异常
        IllegalArgumentException - 如果 componentsnull ,或包含 null
        另请参见:
        linkSize(int,Component[])
      • linkSize

        public void linkSize​(int axis,
                             Component... components)
        强制指定的组件沿指定的轴具有相同的大小,而不管其首选,最小或最大尺寸。 链接的组件被赋予每个链接组件的首选大小的最大值。 例如,如果沿水平轴连接两个组件,并且首选宽度为10和20,则两个组件的宽度为20。

        这可以多次使用来强制任意数量的组件共享相同的大小。

        链接Component不能调整大小。

        参数
        axis - 链接大小的轴; SwingConstants.HORIZONTALSwingConstants.VERTICAL
        components - 要具有相同大小的 Component s
        异常
        IllegalArgumentException - 如果componentsnull ,或包含null ; axis不是SwingConstants.HORIZONTALSwingConstants.VERTICAL
      • replace

        public void replace​(Component existingComponent,
                            Component newComponent)
        用新的组件代替现有组件。
        参数
        existingComponent - 应该删除并替换为 newComponent
        newComponent - 要放入 existingComponent的地方的组件
        异常
        IllegalArgumentException - 如果任一组件是 nullexistingComponent未被此布局管理器管理
      • setLayoutStyle

        public void setLayoutStyle​(LayoutStyle layoutStyle)
        设置LayoutStyle用于计算组件之间的首选间隙。 值为null表示应使用共享实例LayoutStyle
        参数
        layoutStyle - 要使用的 LayoutStyle
        另请参见:
        LayoutStyle
      • getLayoutStyle

        public LayoutStyle getLayoutStyle​()
        返回用于计算组件之间的首选间隙的LayoutStyle 这将返回值为setLayoutStyle ,其值可能为null
        结果
        用于计算组件之间的优选间隙的 LayoutStyle
      • addLayoutComponent

        public void addLayoutComponent​(String name,
                                       Component component)
        通知已将Component添加到父容器。 你不应该直接调用此方法,而应该使用的一个Group方法来添加一个Component
        Specified by:
        addLayoutComponent在接口 LayoutManager
        参数
        name - 与组件关联的字符串
        component - 要添加的 Component
      • addLayoutComponent

        public void addLayoutComponent​(Component component,
                                       Object constraints)
        通知已将Component添加到父容器。 你不应该直接调用此方法,而应该使用的一个Group方法来添加一个Component
        Specified by:
        addLayoutComponent在接口 LayoutManager2
        参数
        component - 添加的组件
        constraints - 说明放置组件的位置
      • getLayoutAlignmentX

        public float getLayoutAlignmentX​(Container parent)
        返回沿x轴的对齐方式。 这指定了组件如何相对于其他组件进行对齐。 该值应为0到1之间的数字,其中0表示原点对齐,1对齐最远离原点,0.5为中心等。
        Specified by:
        getLayoutAlignmentX在接口 LayoutManager2
        参数
        parent - Container托管这个 LayoutManager
        结果
        对齐; 此实现返回.5
        异常
        IllegalArgumentException - 如果 parent是不一样的 Container这是创建与
      • getLayoutAlignmentY

        public float getLayoutAlignmentY​(Container parent)
        返回沿着y轴的对齐。 这指定了组件如何相对于其他组件进行对齐。 该值应为0到1之间的数字,其中0表示原点对齐,1对齐最远离原点,0.5为中心等。
        Specified by:
        getLayoutAlignmentY在接口 LayoutManager2
        参数
        parent - Container托管这个 LayoutManager
        结果
        对准; 此实现返回.5
        异常
        IllegalArgumentException - 如果 parent是不一样的 Container这是创建与
      • invalidateLayout

        public void invalidateLayout​(Container parent)
        使布局无效,指示如果布局管理器已缓存信息,则应将其丢弃。
        Specified by:
        invalidateLayout在接口 LayoutManager2
        参数
        parent - 托管此LayoutManager的 Container
        异常
        IllegalArgumentException - 如果 parent是不一样的 Container这是创建与
      • toString

        public String toString​()
        返回此GroupLayout的字符串表示GroupLayout 该方法旨在用于调试目的,并且返回的字符串的内容和格式可能因实现而异。
        重写:
        toStringObject
        结果
        a string representation of this GroupLayout