Avoir un arbre tree2 comme copie d'un arbre tree1

Résolu
pseudo85 Messages postés 64 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 17 juillet 2009 - 25 nov. 2008 à 23:53
pseudo85 Messages postés 64 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 17 juillet 2009 - 26 nov. 2008 à 12:50
Bonjour,
J'ai un arbre que j'ai construit à partir de mon programme;
Je souhaite avoir avoir un deuxième arbre qui soit une copie excate de ce premier arbre. Pour cela j'ai le code suivant:


  DefaultMutableTreeNode racine1 = new DefaultMutableTreeNode("Noeud racine");
  TreeModel modèle1 = new DefaultTreeModel(racine1);
  JTree jTree1 = new JTree(modèle1);
  TreeModel modèle2 = modèle1;
  JTree jTree2 = new JTree(modèle2);


ça marche, j'ai le deuxième arbre jTree2 exactement semblable au premier. Le problème est que quand je supprime un noeud de l'arbre jTree2, il est également supprimé de l'arbre jTree1, alors que je n'utilise dans la suppression que le "modèle2".
Quel est le problème SVP?
Merci pour votre aide.

2 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
26 nov. 2008 à 02:03
Tu ne copie pas le modèle lui-même, mais seulement la référence du modèle. Dans ce cas, les deux JTree se partage le même modèle et le comportement décrit est normal. Nous pouvons faire une vrai copie en sérialisant l'object. Exemple:

private DefaultTreeModel copyTreeModel(DefaultTreeModel modelOriginal) {
    DefaultTreeModel modelCopy = null;
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    try {
        ObjectOutput out = new ObjectOutputStream(outStream);
        out.writeObject(modelOriginal);
        InputStream inStreem = new ByteArrayInputStream(outStream.toByteArray());
        ObjectInput in = new ObjectInputStream(inStreem);
        modelCopy = (DefaultTreeModel) in.readObject();
    } catch (Exception ex) {
        modelCopy = modelOriginal;//en cas d'échec nous renvoyons l'original
    }
    return modelCopy;
}
3
pseudo85 Messages postés 64 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 17 juillet 2009
26 nov. 2008 à 12:50
Super, ça marche très bien. Merci uhrand.
0
Rejoignez-nous