JavaFX: организация элементов управления в строках (в gridpane) с помощью FXML
У меня есть графический интерфейс с большим количеством элементов управления (метки, текстовые поля, Comboboxes и флажки). Я упорядочиваю их в виде сетки и хотел бы, чтобы они были в строках и столбцах (как это предусмотрено с разметкой сетки).
Если я использую FXML, я пишу его так:
<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>
Теперь вопрос: если я хочу добавить строку между строками 0 и 1, мне нужно увеличить индекс строки следующей строки. Теперь давайте возьмем 20 строк и 5 столбцов, где я хотел бы добавить строку после первой. Это было бы создайте большую возможность для меня, чтобы увеличить число строк для каждой строки ниже первой.
Существует ли что-то вроде элемента row, который помещает свои дочерние элементы управления в одну и ту же строку с возрастающими номерами столбцов? Я думаю примерно так:
<GridPane>
<GridPane.Row>
<Label text="field1"/>
<TextField/>
</GridPane.Row>
<GridPane.Row>
<Label text="field2"/>
<TextField/>
</GridPane.Row>
</GridPane>
Я знаю о VBox и HBox, что в значительной степени то, что я хочу, но я хочу иметь элементы в Столбцах с фиксированной шириной.
1 ответ:
Вы можете использовать объект для отслеживания
rowIndex
.Java:
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>