J'ai une classe DefaultMutableTreeNode personnalisée conçue pour prendre en charge des connexions robustes entre plusieurs types d'attributs de données (pour moi, ces attributs peuvent être des chaînes, des balises définies par l'utilisateur ou des horodatages). Comme je regroupe des données, je voudrais donner à l'utilisateur un aperçu en direct des données stockées que nous avons vu jusqu'à présent. Pour des raisons d'efficacité, je souhaite conserver uniquement une copie d'un attribut particulier, qui peut avoir de nombreuses connexions avec d'autres attributs. Exemple: L'étiquette définie par l'utilisateur "LOL" apparaît à cinq moments différents (représentés par TimeStamps). Donc, mon JTree (la classe qui affiche cette information) aura cinq nœuds parents (un pour chaque fois que cette balise est apparue). Ces nœuds parents doivent TOUS PARTAGER UNE INSTANCE du DefaultMutableTreeNode défini pour la balise "LOL".Partage d'enfants entre parents dans un JTree
Malheureusement, en utilisant le module complémentaire (MutableTreeNode newChild) Retire newChild de QUELQUE le nœud parent actuel. C'est vraiment dommage, puisque je veux que TOUS les nœuds parents aient le même nœud enfant.
Voici une photo de FAISANT MAL (Curtis est l'auteur et il doit apparaître POUR TOUS LES FILLES):
Comment puis-je accomplir cela facilement en Java?
Mise à jour
J'ai regardé le code pour DefaultMutableTreeNode.add() ... et je suis surpris que cela fonctionne comme il le fait (les commentaires sont les miens):
public void add(MutableTreeNode child)
{
if (! allowsChildren)
throw new IllegalStateException();
if (child == null)
throw new IllegalArgumentException();
if (isNodeAncestor(child))
throw new IllegalArgumentException("Cannot add ancestor node.");
// one of these two lines contains the magic that prevents a single "pointer" from being
// a child within MANY DefaultMutableTreeNode Vector<MutableTreeNode> children arrays...
children.add(child); // just adds a pointer to the child to the Vector array?
child.setParent(this); // this just sets the parent for this particular instance
}
Par ailleurs, tout cela peut être résolu par clonage DefaultMutableTreeNode., mais cela irait à l'encontre de l'objectif de partager une seule instance d'un enfant –