Module  javafx.graphics
软件包  javafx.scene.layout

Class GridPane

  • All Implemented Interfaces:
    StyleableEventTarget


    public class GridPane
    extends Pane
    GridPane将其孩子放在一个灵活的行和列格网中。 如果设置了边框和/或填充,则其内容将被放置在这些插入内。

    孩子可以放置在网格中的任何位置,并且可以跨越多行/列。 孩子可以在行/列之间自由地重叠,并且它们的堆叠顺序将由格架子的子列表(后面的第0个节点,前面的最后一个节点)的顺序来定义。

    GridPane可能使用CSS来设计背景和边框。 有关详细信息,请参阅Region超类。

    网格限制

    网格中的小孩位置由布局约束定义:

    Grid Constraint Table Constraint Type Description columnIndex integer column where child's layout area starts. rowIndex integer row where child's layout area starts. columnSpan integer the number of columns the child's layout area spans horizontally. rowSpan integer the number of rows the child's layout area spans vertically.

    如果没有显式设置行/列索引,那么子进程将被放置在第一行/列中。 如果行/列跨度未设置,它们将默认为1.可以动态更改子对象的位置约束,并且格子窗格将相应更新。

    不需要前面指定行/列的总数,因为网格将自动展开/收缩网格以适应内容。

    要使用GridPane,应用程序需要设置子对象的布局约束,并将这些子项添加到gridpane实例中。 在GridPane类上使用静态setter方法设置限制:

       GridPane gridpane = new GridPane(); // Set one constraint at a time... // Places the button at the first row and second column Button button = new Button(); GridPane.setRowIndex(button, 0); GridPane.setColumnIndex(button, 1); // or convenience methods set more than one constraint at once... Label label = new Label(); GridPane.setConstraints(label, 2, 0); // column=2 row=0 // don't forget to add children to gridpane gridpane.getChildren().addAll(button, label);  
    应用程序还可以使用方便的方法,它们结合设置约束和添加子项的步骤:
       GridPane gridpane = new GridPane(); gridpane.add(new Button(), 1, 0); // column=1 row=0 gridpane.add(new Label(), 2, 0); // column=2 row=0  

    行/列尺寸

    默认情况下,行和列的大小适合其内容; 一列将足够宽以容纳最宽的小孩,一行足够高以适合最高的孩子。但是,如果应用程序需要显式控制行或列的大小,则可以通过添加RowConstraints和ColumnConstraints对象来指定那些指标。 例如,要创建一个具有两个固定宽度列的网格:
       GridPane gridpane = new GridPane(); gridpane.getColumnConstraints().add(new ColumnConstraints(100)); // column 0 is 100 wide gridpane.getColumnConstraints().add(new ColumnConstraints(200)); // column 1 is 200 wide  
    默认情况下,格栅将行/列调整为其首选大小(由内容计算或固定),即使格网尺寸大于其首选大小。 如果应用程序需要特定的行或列来增长,如果有额外的空间,它可能会设置它在RowConstraints或ColumnConstraints对象上的优先级。 例如:
       GridPane gridpane = new GridPane(); ColumnConstraints column1 = new ColumnConstraints(100,100,Double.MAX_VALUE); column1.setHgrow(Priority.ALWAYS); ColumnConstraints column2 = new ColumnConstraints(100); gridpane.getColumnConstraints().addAll(column1, column2); // first column gets any extra width  

    注意:跨多个行/列的节点也将与首选大小相同。 受影响的行/列按照以下优先级调整大小:增加优先级,最后一行。 这是关于行/列的约束。

    百分比大小

    或者,RowConstraints和ColumnConstraints允许将大小指定为gridpane可用空间的百分比:
       GridPane gridpane = new GridPane(); ColumnConstraints column1 = new ColumnConstraints(); column1.setPercentWidth(50); ColumnConstraints column2 = new ColumnConstraints(); column2.setPercentWidth(50); gridpane.getColumnConstraints().addAll(column1, column2); // each get 50% of width  
    如果在行/列上设置了一个百分比值,那么该值将取决于先前的值,并且行/列的min,pref,max和grow约束将被忽略。

    请注意,如果widthPercent(或heightPercent)值的总和大于100,则该值将被视为权重。 例如,如果3列的宽度百分比为50,则每个列将分配格栅的可用宽度的1/3(50 /(50 + 50 + 50))。

    混合尺寸类型

    应用程序可以自由地混合行/列的大小类型(从内容,固定或百分比计算)。 根据网格空间可用空间的百分比(大小减去插页和间距),行/列百分比始终首先被分配空间。 给定其最小,优选和最大大小的剩余空间将分配给行/列,并增加优先级。

    可调整范围

    格栅图的父级将在布局期间在格栅图的可调整范围内调整格栅的大小。 默认情况下,网格窗格根据其内容和行/列约束计算此范围,如下表所示。

    GridPane Resize Table width height minimum left/right insets plus the sum of each column's min width. top/bottom insets plus the sum of each row's min height. preferred left/right insets plus the sum of each column's pref width. top/bottom insets plus the sum of each row's pref height. maximum Double.MAX_VALUE Double.MAX_VALUE

    网格板的无界最大宽度和高度是父级的指示,可以将其调整大小超出其首选大小,以填充分配给它的空间。

    GridPane提供了直接设置尺寸范围的属性。 这些属性默认为哨兵值USE_COMPUTED_SIZE,但是应用程序可能会根据需要将它们设置为其他值:

       gridpane.setPrefSize(300, 300); // never size the gridpane larger than its preferred size: gridpane.setMaxSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);  
    应用程序可以通过将这些属性设置回USE_COMPUTED_SIZE来恢复计算值。

    默认情况下,GridPane不会剪切其内容,因此如果孩子的最小大小阻止其适合其空间,则儿童边界可能会延伸到其自己的界限之外。

    可选布局限制

    应用程序可以设置对孩子的附加限制,以定制小孩在由行/列索引/跨度建立的布局区域内的大小和位置:

    GridPane Constraint Table Constraint Type Description halignment javafx.geometry.HPos The horizontal alignment of the child within its layout area. valignment javafx.geometry.VPos The vertical alignment of the child within its layout area. hgrow javafx.scene.layout.Priority The horizontal grow priority of the child. vgrow javafx.scene.layout.Priority The vertical grow priority of the child. margin javafx.geometry.Insets Margin space around the outside of the child.

    默认情况下,其布局区域中的子对象由行和列的对齐方法定义。 如果在子对象上设置了一个单独的对齐约束,那么该对齐方式将仅覆盖该子对象的行/列对齐方式。 同一行或列中其他子项的对齐方式不会受到影响。

    另一方面,成长优先级只能应用于整个行或列。 因此,如果在单个子项上设置成长优先级约束,则将用于计算包含行/列的默认增长优先级。 如果在RowConstraint或ColumnConstraint对象上直接设置成长优先级,则它将覆盖从内容计算的值。

    从以下版本开始:
    JavaFX 2.0
    • 字段详细信息

      • REMAINING

        public static final int REMAINING
        可以在子行的行/列跨度约束上设置Sentinel值,以指示它应该跨剩余的行/列。
        另请参见:
        Constant Field Values
    • 构造方法详细信息

      • GridPane

        public GridPane​()
        使用hgap / vgap = 0和TOP_LEFT对齐创建一个GridPane布局。
    • 方法详细信息

      • setRowIndex

        public static void setRowIndex​(Node child,
                                       Integer value)
        设置子窗格的行索引,当窗格包含时,它将从网格的该行开始定位。 如果一个网格窗口小孩没有设置行索引,它将被定位在第一行。 将值设置为null将删除约束。
        参数
        child - child的子节点
        value - 小孩的行索引
      • getRowIndex

        public static Integer getRowIndex​(Node child)
        如果设置,返回小孩的行索引约束。
        参数
        child - child的子节点
        结果
        子行的行索引,如果没有设置行索引,则为null
      • setColumnIndex

        public static void setColumnIndex​(Node child,
                                          Integer value)
        设置子窗格的列索引,当窗格包含时,它将从网格窗的该列开始定位。 如果一个网格窗口小孩没有设置列索引,它将被放置在第一列中。 将值设置为null将删除约束。
        参数
        child - child的子节点
        value - 小孩的列索引
      • getColumnIndex

        public static Integer getColumnIndex​(Node child)
        如果设置,则返回小孩的列索引约束。
        参数
        child - child的子节点
        结果
        子列的列索引,如果没有设置列索引,则为null
      • setRowSpan

        public static void setRowSpan​(Node child,
                                      Integer value)
        设置子窗格包含的格子行的行跨度,以便它垂直跨越该行数。 这可能设置为REMAINING,这将导致跨度延伸到所有剩余的行。

        如果网格框小孩没有设置行跨度,则它将默认跨越一行。 将值设置为null将删除约束。

        参数
        child - child的子节点
        value - 孩子的行跨度
      • getRowSpan

        public static Integer getRowSpan​(Node child)
        如果设置,返回小孩的行跨限制。
        参数
        child - child的子节点
        结果
        子行的行跨度,如果没有设置行跨度,则为null
      • setColumnSpan

        public static void setColumnSpan​(Node child,
                                         Integer value)
        设置子窗格包含的网格窗格的列跨度,以便它横跨该列数列。 这可能设置为REMAINING,这将导致跨度延伸到所有剩余的列。

        如果一个网格框子项没有设置列范围,它将默认为跨越一列。 将值设置为null将删除约束。

        参数
        child - child的子节点
        value - 小孩的列跨度
      • getColumnSpan

        public static Integer getColumnSpan​(Node child)
        如果设置,则返回小孩的列跨度约束。
        参数
        child - child的子节点
        结果
        子列的列范围,如果没有设置列跨距,则为null
      • setMargin

        public static void setMargin​(Node child,
                                     Insets value)
        设置子窗格包含的格子的边距。 如果设置,格栅将其周围的边缘空间放置。 将值设置为null将删除约束。
        参数
        child - child的子节点
        value - 孩子周围的空间
      • getMargin

        public static Insets getMargin​(Node child)
        如果设置,返回小孩的边距约束。
        参数
        child - child的子节点
        结果
        小孩的保证金,如果没有设置保证金,则为null
      • setHalignment

        public static void setHalignment​(Node child,
                                         HPos value)
        设置子窗格的水平对齐方式。 如果设置,将覆盖网格板的默认水平对齐。 将值设置为null将删除约束。
        参数
        child - child的子节点
        value - 孩子的水平线对齐
      • getHalignment

        public static HPos getHalignment​(Node child)
        如果设置,返回小孩的暂停约束。
        参数
        child - child的子节点
        结果
        子项的水平对齐方式,如果未设置对齐,则为空
      • setValignment

        public static void setValignment​(Node child,
                                         VPos value)
        设置子窗格的垂直对齐方式。 如果设置,将覆盖网格板的默认垂直对齐方式。 将值设置为null将删除约束。
        参数
        child - child的子节点
        value - 孩子的垂直对齐方式
      • getValignment

        public static VPos getValignment​(Node child)
        如果设置,则返回小孩的对齐约束。
        参数
        child - child的子节点
        结果
        儿童的垂直对齐方式,如果没有设置对齐,则为空
      • setHgrow

        public static void setHgrow​(Node child,
                                    Priority value)
        设置子格中包含的网格的水平增长优先级。 如果设置,如果格网尺寸大于其首选宽度,则网格将使用优先级来分配子级额外的水平空间。 将值设置为null将删除约束。
        参数
        child - child的孩子
        value - 小孩的横向成长优先级
      • getHgrow

        public static Priority getHgrow​(Node child)
        如果设置,返回小孩的hgrow约束。
        参数
        child - child的子节点
        结果
        子级的水平增长优先级,如果没有设置优先级,则为null
      • setVgrow

        public static void setVgrow​(Node child,
                                    Priority value)
        设置子格中包含的网格的垂直成长优先级。 如果设置,如果网格尺寸大于其首选高度,则格栅将使用优先级来分配子级额外的垂直空间。 将值设置为null将删除约束。
        参数
        child - child的孩子
        value - 孩子的垂直成长优先级
      • getVgrow

        public static Priority getVgrow​(Node child)
        如果设置,则返回小孩的vgrow约束。
        参数
        child - child的子节点
        结果
        该小孩的垂直成长优先级,如果没有设置优先级,则为null
      • setFillWidth

        public static void setFillWidth​(Node child,
                                        Boolean value)
        设置子窗格的水平填充策略。 如果设置,则网格将使用策略来确定是否应扩展节点以填充列或调整为其首选宽度。 将值设置为null将删除约束。 如果没有为节点或列指定值,则默认值为true。
        参数
        child - child的子节点
        value - 水平填充策略或未设置的null
        从以下版本开始:
        JavaFX 8.0
      • isFillWidth

        public static Boolean isFillWidth​(Node child)
        如果设置,返回小孩的横向填充策略
        参数
        child - child的子节点
        结果
        小孩的横向填充策略,如果没有设置策略,则为null
        从以下版本开始:
        JavaFX 8.0
      • setFillHeight

        public static void setFillHeight​(Node child,
                                         Boolean value)
        设置子窗格包含的窗格的垂直填充策略。 如果设置,格栅将使用策略来确定是否应扩展节点以填充行或调整为其首选高度。 将值设置为null将删除约束。 如果没有为节点或行指定值,则默认值为true。
        参数
        child - child的子节点
        value - 垂直填充策略或未设置的null
        从以下版本开始:
        JavaFX 8.0
      • isFillHeight

        public static Boolean isFillHeight​(Node child)
        如果设置,返回小孩的垂直填充策略
        参数
        child - child的子节点
        结果
        子项的垂直填充策略,如果没有设置策略,则为null
        从以下版本开始:
        JavaFX 8.0
      • setConstraints

        public static void setConstraints​(Node child,
                                          int columnIndex,
                                          int rowIndex)
        设置子窗格中包含的列,行排列。
        参数
        child - child的子节点
        columnIndex - 小孩的列索引位置
        rowIndex - 小孩的行索引位置
      • setConstraints

        public static void setConstraints​(Node child,
                                          int columnIndex,
                                          int rowIndex,
                                          int columnspan,
                                          int rowspan)
        设置子网格中包含的列,列,列跨度和行跨度值。
        参数
        child - child的子节点
        columnIndex - 小孩的列索引位置
        rowIndex - 小孩的行索引位置
        columnspan - 小孩应跨越的列数
        rowspan - 孩子应该跨越的行数
      • setConstraints

        public static void setConstraints​(Node child,
                                          int columnIndex,
                                          int rowIndex,
                                          int columnspan,
                                          int rowspan,
                                          HPos halignment,
                                          VPos valignment)
        设置网格位置,跨度和子对齐方式。
        参数
        child - child的子节点
        columnIndex - 小孩的列索引位置
        rowIndex - 小孩的行索引位置
        columnspan - 孩子应跨越的列数
        rowspan - 孩子应该跨越的行数
        halignment - 孩子的水平对齐
        valignment - 孩子的垂直对齐
      • setConstraints

        public static void setConstraints​(Node child,
                                          int columnIndex,
                                          int rowIndex,
                                          int columnspan,
                                          int rowspan,
                                          HPos halignment,
                                          VPos valignment,
                                          Priority hgrow,
                                          Priority vgrow)
        设置网格位置,跨度和子对齐方式。
        参数
        child - child的子节点
        columnIndex - 小孩的列索引位置
        rowIndex - 小孩的行索引位置
        columnspan - 小孩应跨越的列数
        rowspan - 孩子应该跨越的行数
        halignment - 孩子的水平对齐
        valignment - 孩子的垂直对齐
        hgrow - 小孩的横向成长优先级
        vgrow - 小孩的垂直成长优先级
      • setConstraints

        public static void setConstraints​(Node child,
                                          int columnIndex,
                                          int rowIndex,
                                          int columnspan,
                                          int rowspan,
                                          HPos halignment,
                                          VPos valignment,
                                          Priority hgrow,
                                          Priority vgrow,
                                          Insets margin)
        设置网格位置,跨度,对齐方式,增加优先级,以及子窗格包含在网格中时的边距。
        参数
        child - child的子节点
        columnIndex - 小孩的列索引位置
        rowIndex - 小孩的行索引位置
        columnspan - 孩子应跨越的列数
        rowspan - 孩子应该跨越的行数
        halignment - 孩子的水平对齐
        valignment - 孩子的垂直对齐
        hgrow - 小孩的横向成长优先级
        vgrow - 孩子的垂直成长优先级
        margin - 孩子周围的空间
      • clearConstraints

        public static void clearConstraints​(Node child)
        从子节点中删除所有网格框约束。
        参数
        child - 子节点
      • setHgap

        public final void setHgap​(double value)
        设置属性hgap的值。
        Property description:
        列之间的水平间隙的宽度。
      • getHgap

        public final double getHgap​()
        获取属性hgap的值。
        Property description:
        列之间的水平间隙的宽度。
      • setVgap

        public final void setVgap​(double value)
        设置属性vgap的值。
        Property description:
        行之间的垂直间隙的高度。
      • getVgap

        public final double getVgap​()
        获取属性vgap的值。
        Property description:
        行之间的垂直间隙的高度。
      • setAlignment

        public final void setAlignment​(Pos value)
        设置属性对齐的值。
        Property description:
        格栅在格栅宽度和高度内的对齐方式。
      • getAlignment

        public final Pos getAlignment​()
        获取属性对齐的值。
        Property description:
        格栅在格栅宽度和高度内的对齐方式。
      • setGridLinesVisible

        public final void setGridLinesVisible​(boolean value)
        设置属性gridLinesVisible的值。
        Property description:
        仅用于调试目的:控制是否显示行是否显示网格板的行和列。 默认值为false
      • isGridLinesVisible

        public final boolean isGridLinesVisible​()
        获取属性gridLinesVisible的值。
        Property description:
        仅用于调试目的:控制是否显示行是否显示网格板的行和列。 默认值为false
      • getRowConstraints

        public final ObservableList<RowConstraints> getRowConstraints​()
        返回行约束列表。 可以添加行约束以显式控制单个行大小和布局行为。 如果未设置,则基于内容计算行大小和布局行为。 ObservableList中的索引表示行号,因此第一行的行约束位于0的位置。
        结果
        行约束列表
      • getColumnConstraints

        public final ObservableList<ColumnConstraints> getColumnConstraints​()
        返回列约束列表。 可以添加列约束以显式控制各个列的大小和布局行为。 如果未设置,则基于内容计算列大小和布局行为。 ObservableList中的索引表示列号,因此第一列的列约束位于0。
        结果
        列约束列表
      • add

        public void add​(Node child,
                        int columnIndex,
                        int rowIndex)
        在指定的列,行位置向子窗格添加一个小孩。 这种方便的方法将设置子窗格中的网格列和行约束。
        参数
        child - 节点正被添加到 child
        columnIndex - columnIndex内小孩的列索引位置,从0开始计数
        rowIndex - rowIndex内小孩的行索引位置,从0开始计数
      • add

        public void add​(Node child,
                        int columnIndex,
                        int rowIndex,
                        int colspan,
                        int rowspan)
        在指定的列,行位置和跨度向窗格中添加一个小孩。 这种方便的方法将设置孩子的网格列,行和跨度约束。
        参数
        child - 要添加到 child的节点
        columnIndex - columnIndex内小孩的列索引位置,从0开始计数
        rowIndex - rowIndex内小孩的行索引位置,从0开始计数
        colspan - 孩子的布局区域应该跨越的列数
        rowspan - 孩子的布局区域应该跨越的行数
      • addRow

        public void addRow​(int rowIndex,
                           Node... children)
        将指定节点顺序放置在网格的给定行中的便利方法。 如果行已经包含节点,则指定的节点将被附加到该行。 例如,第一个节点将位于[列,行],第二个位于[列+ 1,行]等。此方法将在节点上设置适当的网格列/列约束,并将节点添加到格栅的孩子序列。
        参数
        rowIndex - rowIndex内的子项的行索引位置
        children - 要在网格中添加为一行的节点
      • addColumn

        public void addColumn​(int columnIndex,
                              Node... children)
        将指定节点顺序放置在网格的给定列中的便利方法。 如果列已经包含节点,则指定的节点将附加到列。 例如,第一个节点将位于[列,行],第二个位于[列,行+ 1]等。此方法将在节点上设置适当的网格列/列约束,并将节点添加到格栅的孩子序列。
        参数
        columnIndex - columnIndex的列索引位置
        children - 要在网格中添加为列的节点
      • computeMinWidth

        protected double computeMinWidth​(double height)
        描述从类复制: Region
        计算该区域的最小宽度。 默认情况下返回左和右插入的总和。 区域子类应该覆盖此方法,以根据其内容和布局策略返回适当的值。 如果子类没有VERTICAL内容偏差,则可以忽略height参数。
        重写:
        computeMinWidthRegion
        参数
        height - 如果最小宽度取决于应该使用的高度
        结果
        计算出该区域的最小宽度
      • computeMinHeight

        protected double computeMinHeight​(double width)
        描述从类复制: Region
        计算该区域的最小高度。 默认返回顶部和底部插入的总和。 区域子类应该覆盖此方法,以根据其内容和布局策略返回适当的值。 如果子类没有HORIZONTAL内容偏差,则可以忽略width参数。
        重写:
        computeMinHeightRegion
        参数
        width - 如果最小高度取决于应该使用的宽度
        结果
        计算该区域的最小高度
      • computePrefWidth

        protected double computePrefWidth​(double height)
        描述从类复制: Region
        计算给定高度的该区域的首选宽度。 区域子类应该覆盖此方法,以根据其内容和布局策略返回适当的值。 如果子类没有VERTICAL内容偏差,则可以忽略height参数。
        重写:
        computePrefWidthRegion
        参数
        height - 如果首选宽度取决于应该使用的高度
        结果
        计算这个区域的首选宽度
      • computePrefHeight

        protected double computePrefHeight​(double width)
        描述从类复制: Region
        计算给定宽度的该区域的首选高度; 区域子类应该覆盖此方法,以根据其内容和布局策略返回适当的值。 如果子类没有HORIZONTAL内容偏差,则可以忽略width参数。
        重写:
        computePrefHeightRegion
        参数
        width - 如果偏好的高度取决于应该使用的宽度
        结果
        该区域计算的优选高度
      • requestLayout

        public void requestLayout​()
        描述从类复制: Parent
        请求在渲染下一个场景之前执行布局传递。 这是异步批量发生一次“脉冲”或动画帧。

        如果此父对象是布局根或非托管,则将直接添加到场景的脏布局列表中,否则将调用requestParentLayout。

        重写:
        requestLayoutParent
      • layoutChildren

        protected void layoutChildren​()
        描述从类复制: Parent
        在布局传递过程中调用这个Parent的孩子进行布局。 默认情况下,它只会将受管理的可调整大小的内容的大小设置为其首选大小,并且不会执行任何节点定位。

        子类应该根据需要重写此函数以布局内容。

        重写:
        layoutChildrenParent
      • toString

        public String toString​()
        返回此 GridPane对象的字符串表示形式。
        重写:
        toStringNode
        结果
        这是一个 GridPane对象的字符串表示形式。
      • getClassCssMetaData

        public static List<CssMetaData<? extends Styleable,?>> getClassCssMetaData​()
        结果
        与此类相关联的CssMetaData可能包括其类的CssMetaData。
        从以下版本开始:
        JavaFX 8.0
      • getRowCount

        public final int getRowCount​()
        返回此GridPane中的行数。
        结果
        行数
        从以下版本开始:
        9
      • getColumnCount

        public final int getColumnCount​()
        返回此GridPane中的列数。
        结果
        列数
        从以下版本开始:
        9
      • getCellBounds

        public final Bounds getCellBounds​(int columnIndex,
                                          int rowIndex)
        返回指定列和行位置的单元格的边界。
        参数
        columnIndex - 此GridPane中单元格的列索引位置,从0开始计数
        rowIndex - 此GridPane中单元格的行索引位置,从0开始计数
        结果
        columnIndex和rowIndex上的单元格的边界。
        从以下版本开始:
        9