Javafx 2: как удалить строку или столбец в Gridpane

Если я хочу программно добавить строку текстовых полей в JavaFx, я могу просто использовать метод добавления сетки.

Это добавляет набор текстовых полей в строку 1.

for (int i = 0; i < Fields.size(); i++) {
   gridpane.add(new TextField(), i, 1);
}

Аналогично, как удалить строку ?. Я не нашел подходящего метода для удобного удаления строки / столбца в JavaFX.


person Natty    schedule 11.04.2014    source источник
comment
Вы установили ограничения на размер столбцов или строк? Потому что это может привести к тому, что столбцы будут занимать место, даже если они пусты.   -  person SasQ    schedule 27.04.2016


Ответы (3)


Нет прямо эквивалентного метода. Чтобы удалить узлы, просто используйте gridpane.getChildren().remove(...); или gridpane.getChildren().removeAll(...); и передайте узлы, которые вы хотите удалить с панели.

person James_D    schedule 11.04.2014
comment
Кажется, это не удаляет строку или столбец с панели, если я попытаюсь уменьшить сетку, удалив Nodes из последних строк и столбцов, другие строки и столбцы не расширятся, чтобы заполнить пространство, строки и столбцы все еще там ... - person Troyseph; 24.06.2015
comment
В JavaFX макет сверху вниз; то есть пространство, занимаемое GridPane (и его расположение), определяется его родительским узлом. Это похоже на проблему с тем, как вы управляли макетом (но также, возможно, у вас неправильные ограничения строки и / или столбца на вашем GridPane). Вероятно, вам следует опубликовать вопрос, показывающий, что именно вы пытаетесь сделать, с помощью некоторого кода. - person James_D; 24.06.2015

В 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-я строка .)

person Ruben9922    schedule 07.12.2017
comment
это должно быть ||, индекс строки не может быть нулем и 0 одновременно - person Xerus; 10.12.2017

Это работает очень хорошо:

while(MainGridPane.getRowConstraints().size() > 0){
    MainGridPane.getRowConstraints().remove(0);
}

while(MainGridPane.getColumnConstraints().size() > 0){
    MainGridPane.getColumnConstraints().remove(0);
}
person Janusz Waligóra    schedule 07.04.2017