Ciao a tutti,
devo convertire una struttura ad albero (TreeSLL) in un JTree.
Ho scritto il seguente codice:
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());
}
Dove "todo" è una struttura a coda che mi permette la visita per livelli del mio albero "t" che passo come parametro.
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.