Javafx2:Como excluo uma linha ou coluna no Gridpane
Pergunta
Se eu quiser adicionar uma linha de campos de texto programaticamente em JavaFx, posso simplesmente usar o método gridpane add
Isso adiciona um conjunto de campos de texto à linha 1.
for (int i = 0; i < Fields.size(); i++) {
gridpane.add(new TextField(), i, 1);
}
Da mesma forma, como excluo uma linha?Não encontro um método adequado para excluir uma linha/coluna de maneira conveniente no JavaFX.
Solução
Não existe um método diretamente equivalente.Para remover nós, basta usargridpane.getChildren().remove(...);
ou gridpane.getChildren().removeAll(...);
e passe os nós que deseja remover do painel.
Outras dicas
No Java 8+, você pode usar removeIf
:
gridPane.getChildren().removeIf(node -> GridPane.getRowIndex(node) == rowNumber);
Embargo
Se remover itens do 0ª linha, verifique também GridPane.getRowIndex(node) == null
, ou seja,
node -> GridPane.getRowIndex(node) == null || GridPane.getRowIndex(node) == 0
(Acho que isso é JavaFX deixando o número da linha como null
quando nenhum número de linha é fornecido no elemento correspondente em FXML, mesmo que não fornecer nenhum número de linha em FXML signifique que o elemento está na 0ª linha, já que a linha padrão é a 0ª linha.)
Isso funciona muito bem:
while(MainGridPane.getRowConstraints().size() > 0){
MainGridPane.getRowConstraints().remove(0);
}
while(MainGridPane.getColumnConstraints().size() > 0){
MainGridPane.getColumnConstraints().remove(0);
}