PDA

View Full Version : [JAVA] Jtree o implementazione classica dell'albero?


Checco83
26-11-2009, 12:36
Ciao forum! Volevo sapere se è possibile,una volta costruito un albero attraverso il Jtree, effettuare su di esso le "classiche" operazioni che si possono effettuare sugli alberi (ricerca di un elemento, aggiunta di nodi figli etc.) oppure se un Jtree è solo un modo per rappresentare graficamente un albero senza dare la possibilità di "lavorarci sopra". Per essere più preciso : ho un file .txt contenente delle queries SQL(corrette) e devo costruire un albero sintattico contenente TUTTE queste queries. Allego un'immagine che, credo, possa chiarire un po' ciò che devo fare.

fero86
27-11-2009, 15:51
dall'immagine non si capisce nulla...

JTree é un componente grafico di Swing, si usa per creare GUI, non per gestire strutture algoritmiche.

per creare un albero non ti serve neanche di usare delle Collection Classes, é sufficiente che metti nella classe che rappresenta un nodo un riferimento al primo nodo figlio e uno al prossimo nodo "fratello".

PGI-Bis
27-11-2009, 16:03
Le modifiche ad un JTree passano per il suo modello. Una cosa di questo genere:

DefaultMutableTreeNode root = new DefaultMutableTreeNode("radice");
DefaultTreeModel model = new DefaultTreeModel(root);
JTree tree = new JTree(model);

Con root, model e tree puoi fare tutto quel che vuoi.

Per inserimenti e rimozioni, usi "model":

model.insertNodeInto(genitore, figlio, posizioneDelFiglioNelGenitore);
model.removeNodeFromParent(figlioDaRimuovere);

Per lo scorrimento usi root:

Enumeration<?> branch = root.depthFirstEnumeration();
while(branch.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) branch.nextElement();
}

Qui si suppone che l'albero contenga solo nodi di tipo DefaultMutableTreeNode, che è effettivamente il tipo di nodo standard che uno usa quando definisce un albero da zero - a meno che non voglia farsi del male o abbia necessità particolari (tipo un ordinamento per user object).

Checco83
03-12-2009, 19:02
Anche se con qualche giorno di ritardo, vi ringrazio per le risposte :)