Явафкс 2:Как удалить строку или столбец в Gridpane
Вопрос
Если я хочу программно добавить строку текстовых полей в JavaFx, я могу просто использовать метод добавления Gridpane.
Это добавит набор текстовых полей в строку 1.
for (int i = 0; i < Fields.size(); i++) {
gridpane.add(new TextField(), i, 1);
}
Аналогично, как удалить строку?Я не нашел подходящего метода для удобного удаления строки/столбца в JavaFX.
Решение
Нет непосредственно эквивалентного метода.Удалить узлы, просто используйте
gridpane.getChildren().remove(...);
или gridpane.getChildren().removeAll(...);
и пропуск в узлах, которые вы хотите удалить с панели.
Другие советы
В Java 8+ вы можете использовать removeIf
:
gridPane.getChildren().removeIf(node -> GridPane.getRowIndex(node) == rowNumber);
Предостережение
Если удалить элементы из 0-я строка, также проверьте GridPane.getRowIndex(node) == null
, то есть,
node -> GridPane.getRowIndex(node) == null || GridPane.getRowIndex(node) == 0
(Я думаю, что это JavaFX, оставляющий номер строки как null
когда в соответствующем элементе в FXML не указан номер строки, хотя отсутствие номера строки в FXML означает, что элемент находится в 0-й строке, поскольку строкой по умолчанию является 0-я строка.)
Это работает довольно хорошо:
while(MainGridPane.getRowConstraints().size() > 0){
MainGridPane.getRowConstraints().remove(0);
}
while(MainGridPane.getColumnConstraints().size() > 0){
MainGridPane.getColumnConstraints().remove(0);
}
.