jTree - Procurar 'node' por nome

Pessoal, boa tarde.

estou aprendendo a mexer com Jtree, e segui boa parte do que está aqui: http://www.guj.com.br/java/37821-como-usar-jtree

Agora quero implementar uma busca, que encontre um determinado ‘node’ pelo seu nome. (pelo nome do livro, ou autor).

Pesquisando, encontrei algo como isso:

	public void pesquisaLivro(ActionEvent evt){
			String nmLivro = txtLivro.getText().trim();
		    DefaultMutableTreeNode node = null;
		    DefaultMutableTreeNode m_rootNode = (DefaultMutableTreeNode) treeLivros.getModel().getRoot();
		    Enumeration e = m_rootNode.breadthFirstEnumeration();
		    while (e.hasMoreElements()) {
		      node = (DefaultMutableTreeNode) e.nextElement();
		      if (nmLivro.equals(node.getUserObject().toString())) {
		        JOptionPane.showMessageDialog(null, "achou");
		      }
		    }
}

Porém, não vai da certo… pois o meu TreeModel insere os nodes como objetos do tipo Livro ou autor, e não do tipo DefaultMutableTreeNode…
ou seja, o Enumeration só vem com a raiz do jTree.

o que eu faço?

http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

amigo, sou iniciante em swing e isso não ajudou muito. =S

Desculpe cara não tenho como testar seu código aqui agora, mais vou te passar um link que é certo que vc vai achar o caminho das pedras

https://www.google.com.br/search?q=pegar+o+node+do+jtree+java&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a&channel=fflb#client=firefox-a&rls=org.mozilla:en-US%3Aofficial&channel=fflb&biw=1087&bih=325&sclient=psy-ab&q=get+name+node+selected+jtree+java&oq=get+name+node+selected+jtree+java&gs_l=serp.3…226798.239558.0.239793.35.33.1.1.1.1.305.7888.0j7j24j2.33.0…0.0…1c.1.14.psy-ab.SzqsrEc0nMs&pbx=1&bav=on.2,or.r_cp.r_qf.&bvm=bv.47008514,d.eWU&fp=62801f88e75f8b30

Pelo que estou entendendo, os meus beans Livro e Autor deverão implementar a interface TreeNode.

O problema é, como implementar os métodos obrigatórios dessa interface. =S

Siga a dica que postei nesse mesmo tópico que você linkou.

Qual dica Vini? Desculpa, mas estou iniciando agora com swing.

eu estou com o seu projeto aqui aberto, e não consigo implementar a busca nele.

abs

Tem um post gigante onde explico como montar um TreeModel:
http://www.guj.com.br/java/37821-como-usar-jtree#501820

A idéia do TreeModel é justamente você não depender do DefaultMutableTreeNode para nada. Seria possível implementar a busca fora, nas suas classes de negócios, e só refleti-la no model.

[quote=ViniGodoy]Tem um post gigante onde explico como montar um TreeModel:
http://www.guj.com.br/java/37821-como-usar-jtree#501820

A idéia do TreeModel é justamente você não depender do DefaultMutableTreeNode para nada. Seria possível implementar a busca fora, nas suas classes de negócios, e só refleti-la no model.[/quote]

sim claro, eu aprendi a utilizar o tree model, o problema(que não consigo resolver) está justamente em como implementar a busca.

Como percorrer todos os nodes desse tree model? (livros e autores) por exemplo? pode me ajudar a fazer isso por favor?

agora consigo percorrer e encontrar o node com o nome da pesquisa, mas agora gostaria de expandi a arvore até esse nó.

protected void walk(TreeModel model, Object o, String pesquisa)
    {
    	System.out.println(o.toString());
       	int count = model.getChildCount(o);
       	
        for(int i=0;  i < count;  i++) {       
           Object child = model.getChild(o, i);   
           if(child.toString().equalsIgnoreCase(pesquisa)){        	  
        	   System.out.println("AXOUU ZÉÉ!");
           }
           if (model.isLeaf(child)){        		
                System.out.println(child.toString());
           }	
           else{
                walk(model, child, pesquisa);
           }
        }
    }

o codigo abaixo, faz a expansão, o problema é que o objeto child retorna Livro ou autor e não pode ser convertido em node.
como faço para pegar o path do livro?

TreePath path = new TreePath(node.getPath()); treeLivros.expandPath(path.getParentPath()); treeLivros.setSelectionRow(treeLivros.getRowForPath(path));