Olá,
Estou usando na minha aplicacao o codigo de Jtree postado pelo moderador ViniGodoy: http://www.guj.com.br/posts/list/200192.java#1009903
Nesta aplicacao, a Jtree representa maquinas/softwares.
Exemplo:
Cidade
--Maquina 1
-----Software 1
-----Software 2
-----Software n
--Maquina 2
-----Software 1
-----Software 2
-----Software n
.
.
.
Consegui montar a arvore baseado nos dados de um banco de dados, onde alterei as Classes Livro e Autor por Maquinas e softwares respectivamente.
O problema começa quando eu tenho que usar propriedades mais especificas da Jtree. Venho procurando a um tempo solucoes, porem as que encontro geram erro e nao consigo entender o porque. As funcionalidades que preciso implementar sao as seguintes:
Ao iniciar a aplicacao preciso que a Jtree esteja com todos os nos expandidos. O codigo a seguir é para resolver esse problema, porém da erro:
.
.
.
expandAll(treeLivros, true);
.
.
.
public void expandAll(JTree tree, boolean expand) {
TreeNode root = (TreeNode)tree.getModel().getRoot();
// Traverse tree from root
expandAll(tree, new TreePath(root), expand);
}
private void expandAll(JTree tree, TreePath parent, boolean expand) {
// Traverse children
TreeNode node = (TreeNode)parent.getLastPathComponent();
if (node.getChildCount() >= 0) {
for (Enumeration e=node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
expandAll(tree, path, expand);
}
}
// Expansion or collapse must be done bottom-up
if (expand) {
tree.expandPath(parent);
} else {
tree.collapsePath(parent);
}
}
O erro gerado é “Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: java.lang.String cannot be cast to javax.swing.tree.TreeNode”
A excessao é gerada na linha:
TreeNode root = (TreeNode)tree.getModel().getRoot();
Apos te-la extendida, o que preciso é ao iniciar a aplicacao (se o usuario ativar esta acao) cada um dos nós (tanto maquina quanto softwares) sejam percorridos automaticamente, um a um (como se fosse um click do mouse) por determinados segundos, de modo que a cada selecao, eu atualize um Jpanel que fica ao lado da Jtree que contera dados de cada no selecionado.
Exemplo:
Maquina 1 (selected) —> Jpanel = dados da maquina 1
-----Software 1
-----Software 2
Passado alguns segundos…
Maquina 1
-----Software 1 (selected) —> Jpanel = dados do software 1
-----Software 2
E assim por diante.
Obrigado...