Ciao a tutti,
devo convertire una struttura ad albero (TreeSLL) in un JTree.
Ho scritto il seguente codice:
Dove "todo" è una struttura a coda che mi permette la visita per livelli del mio albero "t" che passo come parametro.codice:private void createNodes(DefaultMutableTreeNode top,TreeSLL t) { DefaultMutableTreeNode category = null; QueueList todo = new QueueList(); Trees.TreeNode tr = null; tree = new JTree(top); t.reset(); Trees.TreeNode n = t.cursor; todo.enqueue(n);/*inserisco nella coda la radice*/ DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); while ( !todo.isEmpty() ){/* finchè la coda non è vuota*/ tr = (Trees.TreeNode)todo.dequeue();/*estraggo il primo nodo*/ DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(tr.getValue()); iter = (SL_ListIterator) tr.childList.iterator(); if (!tr.equals(n)){ TreePath path = tree.getNextMatch(tr.parent().getValue(), 0, Position.Bias.Forward); if (path == null) System.out.print("null"); else{ DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent(); model.insertNodeInto(newNode, node, node.getChildCount()); } } while (iter.hasNext()) todo.enqueue(iter.next()); }
La funzione deve visitare tutto l'albero "t" e produrre il JTree "tree".
L'idea è di visitare tutti i nodi di "t" e inserirli man mano sotto al loro padre (trovato dal metodo tree.getNextMatch(tr.parent().getValue(), 0, Position.Bias.Forward);
, dove tr,parent.getValue è il valore stringa del padre che dovrebbe essere già nel JTree nel momento in cui vado a cercarlo).
Il problema è che inserisce solo i nodi con padre uguale alla radice dell'albero, pocihè il suddetto metodo sembra non trovare i padri diversi dalla radice.
Spero di essermi spiegato e che qualcuno possa aiutarmi.
Grazie.

Rispondi quotando