JTree - Como saber quais os nos filhos de um determinado no

Boas…

Estou a tentar imprimir os nos filhos de um determinado no que nao seja o no root da arvore.
Ou seja, na arvore em anexo queria por exemplo, imprimir os nos filhos de numbers, e queria que fosse retornado one, two e three.
No entanto nao estou a conseguir.
Apenas consigo imprimir todos os nos existentes a partir do no root.

Alguem me pode ajudar?

Desde ja um muito obrigado

Cumprimentos

Como está implementado seu TreeModel? Ou você está usando o DefaultMutableTreeNode?

Estou a usar o DefaultMutableTreeNode.

private String rootNode1;
protected DefaultMutableTreeNode rootNode;
protected DefaultTreeModel treeModel;

rootNode = new DefaultMutableTreeNode(this.rootNode1);
treeModel = new DefaultTreeModel(rootNode);
treeModel.addTreeModelListener(new MyTreeModelListener());

Obrigado pela resposta rapida

Não entendi, qual é o problema? Não basta iterar por getChildren() e imprimir? Ou você não consegue encontrar o nó selecionado?

Nao consigo encontrar o no selecionado.
Ou melhor eu queria selecionar um determinado no através do codigo e dps imprimir os seus filhos.
O problema e que quando tento selecionar um determinado no nao consigo todo o caminho para esse no.
depois quando tento varrer os filhos nao funciona.

No entanto caso o no seja selecionado na interface grafica, consigo imprimir os seus filhos, pq ao fazer o e.getSelectionPath(), e retornado todo o caminho ate aquele no

Tipo atraves da funcao:

TreeNode root = (TreeNode) jTree1.getModel().getRoot();

consigo ir buscar todos os nos da arvore,porque me e selecionado o elemento root…

No entato eu queria selecionar em lugar do elemento root, outro elemento da arvore, como por exemplo o numbers e dps imprimir todos os seus filhos.

/**
 * Função que busca um nó, com base no objeto que está dentro dele (no seu caso o objeto que vale "Numbers")
 * @param node Um nó qualquer. Use o root para procurar pela árvore toda.
 * @param node O objeto a ser procurado nesse nó, ou em qualquer filho dele.
 * @return O nó que contém o objeto cujo valor deseja, ou null, caso nenhum nó seja encontrado.
 */
public DefaultMutableTreeNode findNode(DefaultMutableTreeNode node, Object userObject) {
    //Verifica se ele mesmo não é o nó procurado.
    if (node.getUserObject().equals(userObject))
        return this;

    //Se não for, verifica se seus filhos contém o nó procurado
    for (Enumeration e = node.children() ; e.hasMoreElements() ;) {
        DefaultMutableTreeNode child = (DefaultMutableTreeNode) e.nextElement();
        DefaultMutableTreeNode node = findNode(child, userObject);
        if (node != null) return node;      
    }
    return null;
}

/**
 * Função que imprime todos os nós filhos de um determinado nó.
 * @param node O nó.
 */
public void printChildren(DefaultMutableTreeNode node) {
    for (Enumeration e = node.children() ; e.hasMoreElements() ;) {
        DefaultMutableTreeNode child = (DefaultMutableTreeNode) e.nextElement();
        System.out.println(child.getUserObject().toString());
    }
}

Agora, usar o DefaultMutableTreeNode é muito complicado. Note acima como os códigos são extremamente rebuscados e pouco práticos. Eu recomendo fortemente que você aprenda a montar um TreeModel próprio, pois ele facilita muito a vida. Veja um exemplo:
http://www.guj.com.br/posts/list/37821.java#501820

Mesmo com o teu codigo nao funciona…
Ou entao estou a fazer algo muito mal…
Em anexo tem o codigo que tenho feito, se poderes da uma olhada… Ja tenho la os metodos que me arrajante… tao a ser chamadas no save();
Na interface grafica para testar o codigo basta fazer file->save e ver o que e escrito na linha de comandos.
Desculpa la tar a dar muito trabalho.
Se poderes da uma vista de olhos nisso

Ja vi o erro…

estava somente no print k fizes-t…
deves te ter enganado ao escrever…

public void printChildren(DefaultMutableTreeNode node) {
for (Enumeration e = node.children() ; e.hasMoreElements() :wink: {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) e.nextElement();
System.out.println(child.getUserObject().toString());
}

Obrigadao pela ajuda…

um granda abraço

Sim, me enganei mesmo. Eu escrevi os código de cabeça, pois não uso Java aqui no meu trabalho.
Cumprimentos.

Ah, ao publicar códigos, não esqueça de coloca-los entre as tags code:
[code]
Seu código aqui
[/code]

Isso fará com que ele fique colorido e formatado.