IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Débutant][copie object]modifications [FAQ]


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 28
    Points : 17
    Points
    17
    Par défaut [Débutant][copie object]modifications
    Bonjour à toutes et à tous,

    J'ai un objet dont j'aimerai enregistrer l'etat avant de faire des modifications sur celui-ci.
    Mais lorsque je fais les modifications, la copie de l'objet se trouve elle
    aussi changer...Je comprends que ce soit du au fait que ma copie
    pointe sur l'objet...mais je ne vois pas d'autres solutions..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    (object1.getId() = "object1")
    Object oldObject = object1;
    object1.setId("object2");
    (oldObject.getId() = "object2")

  2. #2
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Il faut utiliser la méthode clone() de la classe objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Objet copie = oldObjet.clone();

  3. #3
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (object1.getId() = "object1") 
    Object oldObject = object1; 
    object1.setId("object2"); 
    (oldObject.getId() = "object2")
    En faisant ca tu crée un Object oldObject qui pointe sur object1. (Eh ouais en java tous passe par des pointeurs).
    Pour faire une vrai copie, il faut que tu declare un nouvel objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oldObject = new Object();
    oldObject.setId(object1.getID());
    par exemple (methode bourrine tu reconstruit toi meme un nouvel objet avec les memes parametres).

    Ou sinon tu surcharge la methode clone() et tu appelle celle-ci quand tu veux créer une copie de tes objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object oldObject = object1.clone();
    Voila
    "Quand le sage montre la lune,
    L'idiot regarde le doigt."

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    ça marche pô!!!

  5. #5
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Evite les reponses genre "ca marche po".

    1 - Titeuf a deja probablement depose l'expression

    2 - Que veux-tu que l'on te reponde a part:
    - Qu'est qui ne marche pas ?
    - Quel est ton code ?
    - Quelle est ton erreur ?

    Soit sympa avec toi et fais gagner du temps au gens qui te repondent, fournit tout de suite ces infos ..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Excuse-moi Bulbo...mais ça marche pas...
    j'ai déjà fournit une partie du code...j'ai cloné les objets...
    les modif de l'object 1 apparraissent aussi sur l'oldObject.

    Pour être un peu plus précis (...), mon objet est un vector.
    A l'intérieur, il y a des labels qui me servent de titres pour une fenêtre
    graphique. Une méthode permet de changer ces titres via une
    dialogBox. Mais je garde une trace des anciens titres pour
    la fonction undo de mon outil.

    Les labels pointent sur les titres de mon layer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Label getTitle(){
       return mainTitle_;
    }
    Mon vector est crée avec ses titres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    oldTitles_.add(layer.getTitle());
    puis je crée dans ma méthode de modification de titre 2 vector pour garder la trace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Vector oldVector = new Vector();
    Vector newVector = new Vector();
    oldVector = oldTitles_.clone();
    (...changement de titres...)
    ActionIdentity ai = new ActionIdentity("Titres",oldVector, newVector);
    Voilà...mais dans mon oldVector j'ai exactement mon newVector. :

  7. #7
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Eh bah tu vois la on peut te repondre ..

    Dans la doc du Vector tu verras que seul le Vector est clone (ce n'est pas recursif..). tu peux donc par exemple virer des elements du Vector 1 sans influencer le Vector 2, mais si tu modifies les objets eux meme ca ne marche pas.

    En fait cela ne sert a rien de faire un clone du Vector dans ton cas, tu dois creer un nouveau Vector et cloner un par un les objets du premier Vector avant de les ajouter dans le second ..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Mais comment cloner les objets 1 par 1 (la méthode clone() dans object est protected!)

  9. #9
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Les objets doivent implementer Cloneable c'est suffisant...

    Si il y a un traitement particulier a faire il est possible de redefinir la methode clone en public ..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Disons que je ne peux pas redéfinier l'implémentation des objets type Label, ni des Object (puisque faisant partie de package Jdk)...
    Comment faire ?

    Peux-tu m'expliquer plus clairement comment redéfinir clone en public ?

    merci de ton aide.

  11. #11
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Effectivement la c'est un peu moins facile.

    Je te donne un exemple simple pour un Label par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class MonLabel extends Label implements Cloneable
    {
    }
    Dans ton code il faut desormais que tu utilises la classe MonLabel au lieu de Label ..

    Pour redefinir la fonction clone en public tu fais simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class MaClasse extends Label implements Cloneable
    {
      public Object clone()
      {
         // ton code specifique au clonage de ton objet
      }
    }
    Voila j'espere que tout est clair maintenant ..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Merci de ton aide...je devrais m'en sortir.
    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant]Copie de fichier
    Par fx007 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 01/05/2006, 18h55
  2. [Débutant] Copie d'écran vers BMP
    Par Mille sabords dans le forum Windows
    Réponses: 2
    Dernier message: 23/11/2005, 14h17
  3. [Projet débutant] copie de fichiers
    Par stephonline29 dans le forum Débuter
    Réponses: 13
    Dernier message: 10/11/2005, 14h01
  4. [VBScript] (débutant) Copie d'un répertoire réseau
    Par benoitB dans le forum VBScript
    Réponses: 11
    Dernier message: 28/09/2005, 16h13
  5. [débutant] Problème JSplitPane (modif :InternalFrame)
    Par pingoui dans le forum Agents de placement/Fenêtres
    Réponses: 61
    Dernier message: 03/09/2004, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo