JTree - Como saber quais os nos filhos de um determinado no
9 respostas
T
tezeteta
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.
rootNode = new DefaultMutableTreeNode(this.rootNode1);
treeModel = new DefaultTreeModel(rootNode);
treeModel.addTreeModelListener(new MyTreeModelListener());
Obrigado pela resposta rapida
ViniGodoy
Não entendi, qual é o problema? Não basta iterar por getChildren() e imprimir? Ou você não consegue encontrar o nó selecionado?
T
tezeteta
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
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.
ViniGodoy
/** * 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. */publicDefaultMutableTreeNodefindNode(DefaultMutableTreeNodenode,ObjectuserObject){//Verifica se ele mesmo não é o nó procurado.if(node.getUserObject().equals(userObject))returnthis;//Se não for, verifica se seus filhos contém o nó procuradofor(Enumeratione=node.children();e.hasMoreElements();){DefaultMutableTreeNodechild=(DefaultMutableTreeNode)e.nextElement();DefaultMutableTreeNodenode=findNode(child,userObject);if(node!=null)returnnode;}returnnull;}/** * Função que imprime todos os nós filhos de um determinado nó. * @param node O nó. */publicvoidprintChildren(DefaultMutableTreeNodenode){for(Enumeratione=node.children();e.hasMoreElements();){DefaultMutableTreeNodechild=(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
T
tezeteta
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
T
tezeteta
Ja vi o erro…
estava somente no print k fizes-t…
deves te ter enganado ao escrever…