Capturar linhas selecionadas de uma JTree

4 respostas
criador

Boa tarde à todos.
Estou com um pequeno problema que está me encomodando bastante.
Tenho uma JTree com 3 níveis.
No meu 3º nível, tenho 5 folhas.
Estou percorrendo estas 5 folhas, porém preciso verificar quais folhas estão
selecionadas para a remoção delas.

Alguém tem uma idéia ou sabe algum método que me retorne um booleano
para esta verificação ?!?!

Agradeço desde já!

Rafael

4 Respostas

A

Realmente, nunca usei isso pra nada por isso não sei, mas já tentou olhar na documentação?

Eder_Peixoto

getSelectionPaths(): retorna um array de uma instância de TreePath, que realiza o mapeamento de uma folha e/ou galho específico da árvore.

getSelectionPath(): mesmo que o anterior, mas só retorna o primeiro nó selecionado.

getSelectionCount(): número de nós selecionados.

getSelectionModel(): semelhante ao primeiro, mas retornando uma instância de TreeSelectionModel.

JTree é um pouco chato no início, principalmente por causa da hierarquia, mas lendo isso, principalmente nos métodos “getSelection…”, você já terá uma boa ideia.

criador

Pois é…
É chato mesmo trabalhar com ele.

Já consegui a quantidade de filhos do meu node selecionado e consegui percorrê-los e saber qual o nome de cada um deles.
Única coisa que não consegui achar, é um método onde me retorne quais destes filhos estão selecionados, como é utilizado na JTable com o método isRowSelected(int).

Já li o JavaDoc inteiro deste componente, porém não achei nada.

Mas valeu pela força aí rapaziada.
Se tiverem mais sugestões, serão bem-vindas.

Abraço!

Eder_Peixoto

Olá!

O método abaixo retorna todos os nós filhos que estão selecionados.

/**
     * Retorna os filhos do <code>TreePath</code> path informado que estejam selecionados.
     * @param tree <code>JTree</code> que contem os nos.
     * @param path <code>TreePath</code> pai.
     * @return Relacao dos filhos selecionados, ou NULL caso NAO encontre nenhum ou
     *se o <i>path</i> for uma folha.
     * @since 1.04
     */
    public static List< TreePath > getChildrenSelected( final JTree tree, final TreePath path ){
        //Obtem a instancia da camada model
        TreeModel model = tree.getModel();

        //Obtem o objeto do path.
        Object lastObject = path.getLastPathComponent();

        //Se o path for uma folha, retorna NULL.
        if( model.isLeaf( lastObject ) )
            return null;

        //Obtem todos path selecionados no JTree
        TreePath[] pathSelected = tree.getSelectionPaths();

        //Armazenara os filhos selecionados
        List< TreePath > listSelected = new ArrayList< TreePath >();

        for( int index = 0; index < pathSelected.length; index++ ){
            //Obtem o parent do path selecionado.
            TreePath parent = pathSelected[ index ].getParentPath();

            if( parent != null )
                if( parent.equals( path ) )
                    listSelected.add( pathSelected[ index ] );
        }//Fim do for.

        return listSelected.size() == 0 ? null : listSelected;
    }//Fim do metodo.
Criado 31 de julho de 2009
Ultima resposta 4 de ago. de 2009
Respostas 4
Participantes 3