pseudo85
Messages postés64Date d'inscriptionmardi 7 février 2006StatutMembreDernière intervention17 juillet 2009
-
25 nov. 2008 à 23:53
pseudo85
Messages postés64Date d'inscriptionmardi 7 février 2006StatutMembreDernière intervention17 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.
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 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;
}