Modele de copaci de colorat

Pour rendre le texte dans les nœuds de l`arborescence modifiable, nous appelons setEditable (true) sur l`arborescence. Lorsque l`utilisateur a terminé la modification d`un nœud, le modèle génère un événement de modèle d`arborescence qui indique à tous les écouteurs, y compris le JTree que les nœuds d`arborescence ont changé. Notez que bien que DefaultMutableTreeNode ait des méthodes pour modifier le contenu d`un nœud, les modifications doivent passer par les méthodes de couverture DefaultTreeModel. Sinon, les événements de modèle d`arborescence ne seraient pas générés, et les écouteurs tels que l`arborescence ne seraient pas au courant des mises à jour. Un modèle d`arborescence doit également implémenter des méthodes pour ajouter et supprimer des écouteurs de modèle d`arborescence, et doit déclencher TreeModelEvents pour ces écouteurs lorsque la structure ou les données de l`arborescence changent. Par exemple, lorsque l`utilisateur demande à GenealogyExample de basculer de l`affichage des ancêtres à l`affichage des descendants, le modèle d`arborescence effectue la modification, puis déclenche un événement pour informer ses écouteurs (tels que le composant d`arborescence). Le code crée un nœud, l`insère dans le modèle d`arborescence, puis, s`il y a lieu, demande que les nœuds au-dessus de celui-ci soient étendus et que l`arborescence soit déchantée afin que le nouveau nœud soit visible. Pour insérer le nœud dans le modèle, le code utilise la méthode insertNodeInto fournie par la classe DefaultTreeModel. En créant explicitement le modèle de l`arborescence, le code garantit que le modèle de l`arborescence est une instance de DefaultTreeModel. De cette façon, nous connaissons toutes les méthodes que le modèle d`arbre prend en charge. Par exemple, nous savons que nous pouvons invoquer la méthode insertNodeInto du modèle, même si cette méthode n`est pas requise par l`interface TreeModel. Fait intéressant, l`interface TreeModel accepte n`importe quel type d`objet en tant que nœud d`arborescence. Il ne nécessite pas que les nœuds soient représentés par des objets DefaultMutableTreeNode, ou même que les nœuds implémentent l`interface TreeNode.

Ainsi, si l`interface TreeNode n`est pas adaptée à votre modèle d`arborescence, n`hésitez pas à concevoir votre propre représentation pour les nœuds d`arbre. Par exemple, si vous disposez d`une structure de données hiérarchique préexistante, vous n`avez pas besoin de la dupliquer ou de la forcer dans le moule TreeNode. Vous avez juste besoin d`implémenter votre modèle d`arborescence afin qu`il utilise les informations dans la structure de données existante. Si DefaultTreeModel ne convient pas à vos besoins, vous devrez écrire un modèle de données personnalisé. Votre modèle de données doit implémenter l`interface TreeModel. TreeModel spécifie des méthodes pour obtenir un nœud particulier de l`arborescence, obtenir le nombre d`enfants d`un nœud particulier, déterminer si un nœud est une feuille, notifier le modèle d`une modification dans l`arborescence et ajouter et supprimer des écouteurs de modèle d`arborescence. Pour être averti des modifications de nœud, nous pouvons implémenter un TreeModelListener. Voici un exemple d`écouteur de modèle d`arborescence qui détecte quand l`utilisateur a tapé dans un nouveau nom pour un nœud d`arborescence: ces couleurs ont d`abord été suggérées par Peter Coad, Eric Lefebvre, et Jeff de Luca dans une série d`articles dans la lettre de Coad , [1] [2] et plus tard publié dans leur livre Java Modeling in Color with UML.

[3] vous pouvez trouver l`implémentation de modèle d`arborescence personnalisée dans GenealogyModel. java. Étant donné que le modèle est implémenté en tant que sous-classe Object au lieu de, disons, une sous-classe de DefaultTreeModel, il doit implémenter l`interface TreeModel directement. Cela nécessite d`implémenter des méthodes pour obtenir des informations sur les nœuds, telles que la racine et les enfants d`un nœud particulier. Dans le cas de GenealogyModel, chaque nœud est représenté par un objet de type Person, une classe personnalisée qui n`implémente pas TreeNode. Les normes de couleur UML sont un ensemble de quatre couleurs associées aux diagrammes UML (Unified Modeling Language). Le système de coloration indique lequel de plusieurs archétypes s`applique à l`objet UML. UML identifie généralement un stéréotype avec un commentaire entre crochets pour chaque objet identifiant s`il s`agit d`une classe, d`une interface, etc.