Définir les noeuds :
- TreeNode (interface),
- DefaultMutableTreeNode (implémente MutableTreeNode).
Le renderer par défaut affiche les objets contenus dans les noeuds via la méthode toString().
Les modèles :
- DefaultTreeModel Quelques outils :
- Afficher les lignes entre les noeuds parents et les noeuds enfants :
arbre.putclientProperty("JTree.lineStyle", "Angled");
(dépend du Look & Feel). setShowRootHandles
: Affiche la poignée au neoud rootsetRootVisible
: cache le noeud root (affichage d’une forêt)isLeaf
: ce noeud est une feuillesetAllowchildren
: Ce noeud ne doit contenir aucune feuille.setAskAllowChildren
: Permet de définir si on doit invoquer setAllowChildren pour savoir si le noeud est une feuille (au lieu de isLeaf)
Gestion du chemin :
getSelectionPath
: Renvoie un TreePath- treePath.getLastPathComponent : Dernier objet de la hiérarchie. (ou encore tree.getLastPathComponent)
- Attention :
getSelectionPaths()
renvoie la sélection courante alors quegetPaths()
renvoie les modifications de sélections.
A ne pas faire :
- selection.add(newNode) : Ne met pas à jour l’affichage.
Préférer ces appels :
model.insertNodeInto(newNode, selection, selection.getChildCount()); model.removeNodeFromPArent(selection); model.nodeChanged(selection);
reload()
permet de recharger le modèle en entier. Tous les noeuds redeviennent fermés.
Pour rendre un noeud visible :
nodes = model.getPathToRoot(selection); path = new TreePath(nodes); tree.makevisible(path);
Enfin, tree.scrollPathToVisible(path);
permet de positionner l’arbre correctement dans le scrollPane pour que l’élément cherché soit centré. A appeler à la place de makeVisible
.
Rechercher des noeuds :
- Parcours horizontal :
breadthFirstEnumeration
(recommandé dans la plupart des cas) - Parcours vertical :
depthFirstEnumeration
Affichage :
- Le rendu dépend majoritairement du Look & Feel utilisé.
- Possibilité de modifier les icônes via
renderer.setLeafIcon
,renderer.setClosedIcon
, ou encorerenderer.setOpenIcon
Utilisation des écouteurs :
- TreeSelectionListener
- Choix d’un modèle de sélection : TreeSelectionModel.SINGLE / TreeSelectionModel.CONTIGUOUS, TreeSelectionModel.DISCONTIGUOUS
La méthode setEditable
appelle le DefaultCellEditor.
Utilisation de modèles personnalisés :
- implémenter TreeModel
- gestion d’Ecouteurs TreeModelListener
treeNodeChanged treeNodeInserted treeNodeRemoved treeStructureChanged
- valueForPathChanged(TreePath, Object)