fbcyborg
15-04-2007, 09:56
Forse potrà sembrare strana l'idea di cercare un nodo così ma a me serve. In effetti potrei avere un JTree molto grande e ramificato con 1000 nodi e potrei aver bisogno di andare a cercare uno di essi data la stringa del nome.
E' possibile? Suppongo che si possa fare senza problemi ma fin'ora, leggendo la documentazione e cercando su Internet, non ho trovato la soluzione al problema.
In pratica mi serve un metodo che data una stringa mi evidenzi un nodo nel JTree. (Chiaramente gli passo stringhe di cui sono sicuro che ci sia il relativo nodo, quindi non c'è nemmeno bisogno di gestire il "nodo non trovato")
EDIT: nel frattempo ho trovato questo (http://www.exampledepot.com/egs/javax.swing.tree/FindNode.html) esempio. L'unico problema è che non capisco come usarlo.
Ho modellato un po' il codice in quella pagina per riadattarlo al mio scopo:
Sia dato un jTree come variabile di istanza e poi voglio espandere quel nodo se ha figli e selezionarlo.
public static void main(String[] args){
selectNode("NomeNodo");
}
private void selectNode(String n){
TreePath path = findByName(jTree, new String[]{n});
jTree.expandPath(path);
}
private static TreePath findByName(JTree tree, String[] names) {
javax.swing.tree.TreeNode root = (javax.swing.tree.TreeNode)tree.getModel().getRoot();
return find(tree, new TreePath(root), names, 0);
}
private static TreePath find(JTree tree, TreePath parent, Object[] nodes, int depth) {
javax.swing.tree.TreeNode node = (javax.swing.tree.TreeNode)parent.getLastPathComponent();
Object o = node;
o = o.toString();
if (o.equals(nodes[depth])) {
if (depth == nodes.length-1) {
return parent;
}
if (node.getChildCount() >= 0) {
for (java.util.Enumeration e=node.children(); e.hasMoreElements(); ) {
javax.swing.tree.TreeNode n = (javax.swing.tree.TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
TreePath result = find(tree, path, nodes, depth+1);
if (result != null) {
return result;
}
}
}
}
return null;
}
E' possibile? Suppongo che si possa fare senza problemi ma fin'ora, leggendo la documentazione e cercando su Internet, non ho trovato la soluzione al problema.
In pratica mi serve un metodo che data una stringa mi evidenzi un nodo nel JTree. (Chiaramente gli passo stringhe di cui sono sicuro che ci sia il relativo nodo, quindi non c'è nemmeno bisogno di gestire il "nodo non trovato")
EDIT: nel frattempo ho trovato questo (http://www.exampledepot.com/egs/javax.swing.tree/FindNode.html) esempio. L'unico problema è che non capisco come usarlo.
Ho modellato un po' il codice in quella pagina per riadattarlo al mio scopo:
Sia dato un jTree come variabile di istanza e poi voglio espandere quel nodo se ha figli e selezionarlo.
public static void main(String[] args){
selectNode("NomeNodo");
}
private void selectNode(String n){
TreePath path = findByName(jTree, new String[]{n});
jTree.expandPath(path);
}
private static TreePath findByName(JTree tree, String[] names) {
javax.swing.tree.TreeNode root = (javax.swing.tree.TreeNode)tree.getModel().getRoot();
return find(tree, new TreePath(root), names, 0);
}
private static TreePath find(JTree tree, TreePath parent, Object[] nodes, int depth) {
javax.swing.tree.TreeNode node = (javax.swing.tree.TreeNode)parent.getLastPathComponent();
Object o = node;
o = o.toString();
if (o.equals(nodes[depth])) {
if (depth == nodes.length-1) {
return parent;
}
if (node.getChildCount() >= 0) {
for (java.util.Enumeration e=node.children(); e.hasMoreElements(); ) {
javax.swing.tree.TreeNode n = (javax.swing.tree.TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
TreePath result = find(tree, path, nodes, depth+1);
if (result != null) {
return result;
}
}
}
}
return null;
}