Bom dia, criei uma treeView onde vai inserindo os dados de acordo com a escolha do usuário, preciso agora percorrer toda treeview, ler o root e seus nodes e capturar essas informações de alguma forma.
Como posso fazer isso?
Nunca trabalhei com treeView então a surra está grande.
Grato.
Percorrer e pegar dados de uma TreeView com JavaFX
6 Respostas
Olá,
para começar vc pega o root:
TreeItem root = treeView.getRoot();
o root é um TreeItem assim como os outros e ele possui filhos.
Agora é só percorrer os filhos do root, os filhos dos filhos e assim por diante RECURSIVAMENTE.
para pegar os filhos:
root.getChildren(); //retorna uma lista de items. Percorra esta lista e para cada item dela busque novamente seus filhos.
Olá Rodrigo, obrigado pela resposta, seria possível demonstrar isso com um exemplo? Ainda tenho um longo caminho a percorrer e exemplos ajudam. Grato.
Este exemplo mostra como contar os items da árvore recursivamente, acessando cada nó:
private static <T> long countChildren(TreeItem<T> treeItem) {
long count = 0;
if (treeItem != null) {
ObservableList<TreeItem<T>> children = treeItem.getChildren();
if (children != null) {
count += children.size();
for (TreeItem<T> child : children) {
count += countChildren(child);
}
}
}
return count;
}
long count = countChildren(root);
Rodrigo, muito bom, isso mesmo que eu queria, agora só uma dúvida, terei alguns casos onde a treeview terá mais de um root, por exemplo:
1 - root
1.1 - child
1.2 - child
2 - root
2.1 - child.
Como poderia proceder nesse caso?
não é possível ter mais de 1 root. A árvore só possui 1.
O que podes fazer é criar um root simbólico, pois ele é obrigatório e ocultar ele:
treeView.setShowRoot(false);
assim só serão exibidos seus filhos como nós mais altos.
Muito obrigado, fiz uns testes aqui e aparentemente está tudo ok.