Ola, estou tentando obter o Index de um NO selecionado em um Jtree.
Achei um exemplo que mostra como obter o index do Nó selecionado, porem, só funciona se ele for filho do NO Root. :(, alguem pode me dizer como mudar pra ele trazer o index do nó, sem ser apenas o do root?
Minha situação é essa:
Root
----[color=blue]Nivel 0[/color]
--------SubNivel 0
--------SubNivel 1
--------SubNivel 2
----[color=blue]Nivel 1[/color]
--------SubNivel 0
--------SubNivel 1
----[color=blue]Nivel 2[/color]
--------SubNivel 0
----[color=blue]Nivel 3[/color]
--------SubNivel 0
--------SubNivel 1
Eu selecionando o Nivel X, funciona certinho, ele traz o index correto.
Mas quando eu clico em um SubNivelX, ele traz -1 :(, acredito que seja por causa da [color=olive]linha 31[/color] o [color=darkblue]getRoot()[/color].
Se der pra fazer um método genérico que traga o indice dele referente ao pai, nao consegui :(. Pode ser outro metodo a parte pra trazer o terceiro nivel se nao for possível…
private void gerarArvore() {
root = new DefaultMutableTreeNode("Root");
arvore = new JTree(root);
arvore.setRootVisible(false);
arvore.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
/**
* Evento ao clicar na arvore
*/
arvore.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
mostrarMensagem(getTreeSelecionIndex(e), getContentPane());
}
});
arvoreModelo = (DefaultTreeModel) arvore.getModel();
scrollArvore = new JScrollPane(arvore);
splitArvoreJanelas.setTopComponent(scrollArvore);
splitArvoreJanelas.updateUI();
}
private String getTreeSelecionIndex(TreeSelectionEvent e) {
TreePath tp = e.getNewLeadSelectionPath();
if (tp != null) {
// Get the last component of the selected node path. This is cast to a DefaultMutableTreeNode
DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode) tp.getLastPathComponent();
DefaultTreeModel dtm = (DefaultTreeModel) arvore.getModel(); // get the tree model
//now get the index of the selected node in the DefaultTreeModel
return dtm.getIndexOfChild(dtm.getRoot(), dmtn) + "";
}else{
//JOptionPane.showMessageDialog(null, "No node selected", "Error", JOptionPane.ERROR_MESSAGE);
return "-1";
}
}
Vlw …