NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Guida Java 2D - Capitolo 35: Elementi della GUI di alto livello: alberi con JTree.


 

JTreePer rappresentare visivamente la nota struttura dati dell'albero (tree), cioè un insieme di nodi connessi gerarchicamente e radicati in una root ('radice'), la libreria Swing mette a disposizione la classe JTree ed altre classi 'accessorie', che prenderemo in esame in questo capitolo.

 

 

 

 

 

 

 

 

 

 

Costruttori:

  • JTree();
  • JTree(TreeModel model);
  • JTree(Object[] obj);
  • JTree(Vector v); .

 

 

 

Metodi utili di tale classe:

collapsePath(TreePath path)   :   void Collassa l'albero.
expandPath(TreePath path)   :   void Espande l'albero.
setRootVisible(boolean rootVisible)   :   void Determina se il nodo radice deve essere visibile.
setShowsRootHandles(boolean b)   :   void Determina se il nodo radice deve avere l'icona di compressione.
scrollPathToVisible(TreePath path)   :   void Espande e rende visibile il nodo finale del path.

 

Per creare da zero un 'modello' di albero, è necessario implementare l'interfaccia TreeModel; fortunatamente per noi, il più delle volte è sufficiente utilizzare la classe DefaultTreeModel, che ci fornisce un TreeModel già pronto.

 

Costruttore di DefaultTreeModel:

  • DefaultTreeModel(TreeNode root); .

 

Metodi utili di tale classe:

getRoot()   :   Object Restituisce il nodo radice dell'albero.
isLeaf(Object node)   :   boolean Verifica se il nodo passato come parametro è foglia (non ha nodi figli).
getPathToRoot(TreeNode aNode)   :   TreeNode[] Restituisce un array contenente, in un array, i nodi facenti parte del path che parte dalla radice dell'albero e giunge al nodo specificato come parametro.

 

Un'altra classe 'accessoria' fondamentale è DefaultMutableTreeNode, che implementa l'interfaccia TreeNode.

 

Un oggetto di tipo DMTN rappresenta un nodo dell'albero, dunque può contenere un qualsiasi Object.

 

Costruttori:

  • DefaultMutableTreeNode();
  • DefaultMutableTreeNode(Object userObject); .

 

Metodi utili di DMTN:

children()   :   Enumeration Restituisce la lista dei figli del nodo che ha invocato il metodo.
breadthFirstEnumeration()   :   Enumeration Restituisce la lista dei nodi ottenuta visitando il sottoalbero radicato nel nodo che ha invocato il metodo mediante l'algoritmo breadth-first.
depthFirstEnumeration()   :   Enumeration Restituisce la lista dei nodi ottenuta visitando il sottoalbero radicato nel nodo che ha invocato il metodo mediante l'algoritmo depth-first.
postorderEnumeration()   :   Enumeration Restituisce la lista dei nodi ottenuta visitando il sottoalbero radicato nel nodo che ha invocato il metodo mediante l'algoritmo postorder.
preorderEnumeration()   :   Enumeration Restituisce la lista dei nodi ottenuta visitando il sottoalbero radicato nel nodo che ha invocato il metodo mediante l'algoritmo preorder.
isLeaf()   :   boolean Restituisce true se il nodo che l'ha invocato è una foglia (non ha cioè nodi figli) dell'albero, false altrimenti.
isRoot()   :   boolean Restituisce true se il nodo che l'ha invocato è la radice dell'albero, false altrimenti.
getLevel()   :   int Restituisce il livello del nodo che l'ha invocato (la sua 'distanza' dalla radice).

 

Alla selezione di un nodo è associato l'evento TreeSelectionEvent, rilevabile mediante il listener TreeSelectionListener, che richiede l'implementazione del metodo:

  • valueChanged(TreeSelectionEvent e) .

 

E' possibile specificare la modalità di selezione dei nodi mediante il metodo:

  • setSelectionMode(int mode)    :   void

di TreeSelectionModel, recuperabile con il metodo di JTree:

  • getSelectionModel()   :   TreeSelectionModel .

 

I valori possibili per il parametro mode di setSelectionMode sono (costanti predefinite):

  • SINGLE_TREE_SELECTION;
  • CONTIGUOUS_TREE_SELECTION;
  • DISCONTIGUOUS_TREE_SELECTION.

 

Per specificare la modalità di visualizzazione di una cella (icone diverse per nodi interne e foglie, ecc...) bisogna implementare l'interfaccia TreeCellRenderer ed impostarla nel JTree.

 

Tale interfaccia richiede l'implementazione di un metodo:

  • getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)   :   Component

che specifica la modalità di visualizzazione dei nodi di un JTree; in alternativa, è possibile estendere la classe DefaultTreeCellRenderer.

 

Vediamo adesso come inserire o eliminare dei nodi o modificarne il contenuto.

 

Per effettuare queste operazioni è necessario rendere modificabile l'albero, per cui bisognerà invocare il metodo di JTree:

  • setEditable(boolean b)   :   void

 

A questo punto, bisogna ricavare l'oggetto associato al nodo selezionato, al fine di poter effettuare una delle suddette operazioni; a tale scopo, è possibile utilizzare il metodo di JTree:

  • getLastSelectedPathComponent()   :   Object .

 

Ecco, quindi, i tre metodi utilizzabili per effettuare le operazioni di inserimento, modifica e cancellazione di nodi:

insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index)   :   void Inserisce, come figlio di parent, il figlio newChild in posizione (tra i figli di parent) index.
removeNodeFromParent(MutableTreeNode node)   :   void Rimuove il nodo specificato dall'albero.
nodeChanged(TreeNode node)   :   void Metodo da richiamare DOPO AVER MODIFICATO il nodo selezionato (ottenuto con getLastSelectedPathComponent() ) per 'convalidare' e registrare la modifica.

 

 

Pagina di Francesco Milanese (redbaron85) su Facebook   Pagina di Francesco Milanese (redbaron85) su Google Plus   Profilo di Francesco Milanese (redbaron85) su LinkedIn   Pagina di Francesco Milanese (redbaron85) su Twitter   Canale Youtube di Francesco Milanese (redbaron85ct)

Vai all'inizio della pagina