Percorrer e pegar dados de uma TreeView com JavaFX

6 respostas Resolvido
R

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.

6 Respostas

Rodrigo_Void

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.

R

Olá Rodrigo, obrigado pela resposta, seria possível demonstrar isso com um exemplo? Ainda tenho um longo caminho a percorrer e exemplos ajudam. Grato.

Rodrigo_Void
Solucao aceita

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);
R

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?

Rodrigo_Void

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.

R

Muito obrigado, fiz uns testes aqui e aparentemente está tudo ok.

Criado 17 de janeiro de 2017
Ultima resposta 17 de jan. de 2017
Respostas 6
Participantes 2