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.
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.
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?
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));