JavaFX:使用FXML按行(在网格窗格中)组织控件

时间:2016-02-15 16:01:19

标签: javafx fxml gridpane

我有一个带有很多控件的GUI(标签,文本字段,组合框和复选框)。我在Gridpane中组织它们,并希望将它们放在行和列中(就像使用gridpane布局一样)。

如果我使用FXML,我会这样写:

\

现在问题:如果我想在第0行和第1行之间添加一行,我需要增加下一行的行索引。现在让我们取20行和5列,我想在第一行之后添加一行。这对我来说可以为第一个下面的每一行增加rownumber。

是否有像row-element这样的东西将其子控件放在同一行中且列号增加?我想到这样的事情:

<GridPane>
   <Label GridPane.rowIndex="0" GridPane.columnIndex="0" text="field1"/>
   <TextField GridPane.rowIndex="0" GridPane.columnIndex="1"/>
   <Label GridPane.rowIndex="1" GridPane.columnIndex="0" text="field2"/>
   <TextField GridPane.rowIndex="1" GridPane.columnIndex="1"/>
</GridPane>

我知道VBox和HBox,这正是我想要的,但我希望在固定宽度的列中包含元素。

1 个答案:

答案 0 :(得分:6)

您可以使用对象来跟踪rowIndex

爪哇:

public class RowCounter {
    private int currentRowIndex = 0;

    /**
     * Return current rowIndex.
     * @return
     */
    public int getCr() {
        return currentRowIndex;
    }

    /**
     * Return current rowIndex and increase it.
     * @return
     */
    public int getNr() {
        return currentRowIndex++;
    }
}

FXML:

<GridPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
    <fx:define>
        <RowCounter fx:id="rc" />
    </fx:define>

    <children>
        <Label text="Name:" GridPane.columnIndex="0" GridPane.rowIndex="$rc.cr" />
        <TextField GridPane.columnIndex="1" GridPane.rowIndex="$rc.nr" />

        <Label text="Age:" GridPane.columnIndex="0" GridPane.rowIndex="$rc.cr" />
        <TextField GridPane.columnIndex="1" GridPane.rowIndex="$rc.nr" />

        <Label text="Address:" GridPane.columnIndex="0" GridPane.rowIndex="$rc.cr" />
        <TextField GridPane.columnIndex="1" GridPane.rowIndex="$rc.nr" />
    </children>
</GridPane>