Avoir un arbre tree2 comme copie d'un arbre tree1 [Résolu]

pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 25 nov. 2008 à 23:53 - Dernière réponse : pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 26 nov. 2008 à 02:03
3
Merci
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;
}

Merci uhrand 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 122 internautes ce mois-ci

Commenter la réponse de uhrand
pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 26 nov. 2008 à 12:50
0
Merci
Super, ça marche très bien. Merci uhrand.
Commenter la réponse de pseudo85

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.