Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1975 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  dupliquer un objet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

dupliquer un objet

n°1385597
predateura​ud
Posté le 12-06-2006 à 09:22:55  profilanswer
 

Bonjour,
 
j'ai un objet de type StyledDocument et j'aimerai en faire une copie. Je précise : je ne souhaite pas avoir une référence sur mon objet mais bien un autre objet identique.  

DefaultStyledDocument doc;
StyleContext context;  
 
context = new StyleContext();
doc = new DefaultStyledDocument(context);
 
DefaultStyledDocument copieDoc /*= new DefaultStyledDocument(context)*/;//j'ai essayé avec et sans
copieDoc = doc;

 
 
Si je modifie la copie, c'est l'original qui est modifié.Si quelqu'un a une idée, n'hésitez pas!
 
Merci d'avance :hello:

mood
Publicité
Posté le 12-06-2006 à 09:22:55  profilanswer
 

n°1385820
wapcamer
Posté le 12-06-2006 à 14:46:50  profilanswer
 

Pourquoi tu ne crées pas une méthode clone() dans ton objet, qui créerait un nouvel objet StyledDocument en remplissant les membres internes de ce nouvel objet en copiant ses propres membres internes? et je dis bien en copiant, pas en re-faisant du passage par paramètre, pour ne pas retomber dans ton problème.


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1385861
predateura​ud
Posté le 12-06-2006 à 15:57:03  profilanswer
 

oulala je ne te suis pas trop
aurais tu un petit exemple? c'est surtout l'histoire des membres internes, comment les copierais tu?
Merci de ton aide!

n°1385869
masklinn
í dag viðrar vel til loftárása
Posté le 12-06-2006 à 16:06:28  profilanswer
 

predateuraud a écrit :

oulala je ne te suis pas trop
aurais tu un petit exemple? c'est surtout l'histoire des membres internes, comment les copierais tu?


google shallow copy deep copy


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1385882
wapcamer
Posté le 12-06-2006 à 16:17:02  profilanswer
 

Bon prenons l'exemple suivant:
 

Code :
  1. class MaClasse{
  2. public:
  3.   // Constructeur 1
  4.   MaClasse(){
  5.     // blabla
  6.   }
  7.   // Constructeur 2
  8.   MaClasse(Object1 obj1, Object2 obj2){
  9.     this.objet1 = obj1;
  10.     this.objet2 = obj2;
  11.   }
  12.   MaClasse clone(){
  13.     MaClasse monClone = new MaClasse(this.objet1.clone(), this.objet2.clone() );
  14.     return monClone;
  15.   }
  16. private:
  17.   Object1 objet1;
  18.   Object2 objet2;
  19. }


 
Dans cet exemple, tu as un constructeur de MaClasse sans paramètre et un autre avec paramètre. Le second constructeur permet de créer un nouvel objet en précisant dès l'origine quelles seront les valeurs de ses membres internes.  
Ainsi dans le programme, tu devras trouver qqch du genre:

Code :
  1. ...
  2. MaClasse objet1 = new MaClasse();
  3. ...
  4. //traitements sur objet1
  5. ...
  6. MaClasse cloneObjet1 = objet1.clone();
  7. ...


 
Quand tu appelles objet1.clone(), objet1 crée directement un nouvel objet du type MaClasse en mettant dans ce nouvel objet des objets qui sont les clones des membres internes de objet1.
 
P.ex. si Object1 est un int, la copie est directe. Si Object2 est un String et que tu faisais dans Clone()

Code :
  1. MaClasse monClone = new MaClasse(this.objet1, this.objet2 );


alors dans ce cas, le membre objet2 de la première instance de classe et celui de son clone pointeront vers le meme objet chaineDeCaractère, ce que tu ne veux pas. Tu dois donc t'assurer que tous les objets internes que tu veux retrouver dans le clone ont les mêmes valeurs que dans l'instance de départ, mais sont des objets différents.
 
Note que tu n'es pas obligé de créer un constructeur surchargé spécifique pour faire ça; tu aurais assigner les valeurs du clone directement dans la méthode clone();


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1385907
predateura​ud
Posté le 12-06-2006 à 16:44:14  profilanswer
 

si j'ai bien compris:
 
j'ai créé une classe qui implémente DefaultStyledDocument. Cette classe possède un constructeur qui prend en paramétre un String. Si je ne me trompe pas, le seul élément interne à un ...Document est le texte qu'il contient. Voici mon constructeur suivi de ma méthode clone.  
 
public MyDefaultStyledDocument(String t){
  this.texte=t;
 }
 public MyDefaultStyledDocument cloneDoc() {
  MyDefaultStyledDocument copieDoc = new MyDefaultStyledDocument(this.texte.clone()) ;  
  return copieDoc;
 }
 
 
Le problème est que je ne peux pas compiler puisque le "this.texte.clone()' ne va pas. peux tu me dire où est mon erreur?

n°1385909
wapcamer
Posté le 12-06-2006 à 16:48:08  profilanswer
 

[]
Serveur en cours de maintenance.
 
Veuillez nous excuser pour la gêne occasionnée[/]


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1385911
predateura​ud
Posté le 12-06-2006 à 16:50:44  profilanswer
 

en ce qui concerne l'idée de 'deep copy', je pense que c'est ce qu'il me faut mais je crois qu'il faut aussi utiliser la méthode clone pour faire cela, non?

n°1385917
wapcamer
Posté le 12-06-2006 à 16:56:42  profilanswer
 

Héhé
je voulais dire que dans le cas d'objets complexes, tu dois appliquer le meme principe sur tous les objets.
 
En l'occurrence pour cloner un String en Java, c'est assez compliqué:
 

Code :
  1. String str = "blabla@hfr";
  2. String clone1 = str.toString();
  3. String clone2 = new String(str);


 
On doit même réussir à faire encore plus compliqué en se creusant bien la tête ....  ;)  
 
Mais bon est-ce que ça vaut la peine de se creuser trop la tête si c'est juste pour travailler sur un String?
autant faire

Code :
  1. String tmp=monObject.maString.toSTring()


 
et hop


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1385919
wapcamer
Posté le 12-06-2006 à 16:57:47  profilanswer
 

Pardon j'aurais pas du prendre clone comme nom vu que c'est une méthode de la classe Object et que ça peut préter à confusion.
 
Remplace clone() par copy(), ce sera plus lisible.


Message édité par wapcamer le 12-06-2006 à 16:58:03

---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
mood
Publicité
Posté le 12-06-2006 à 16:57:47  profilanswer
 

n°1385921
predateura​ud
Posté le 12-06-2006 à 17:02:13  profilanswer
 

en fait, ce que je veux reellement copier c'est un DefaultStyledDocument et non la chaine de caractéres qu'il contient mais vu que tu me disais de prendre les éléments internes, je me suis dit qu'il n'y avait que celui la. Je t'avoues que je suis un peu perdue :(
Faut-il que je conserve la classe que j'ai créée? Faut-il essayer de cloner le String et non le document?

n°1385931
wapcamer
Posté le 12-06-2006 à 17:12:12  profilanswer
 

Ben là je dirai que ça dépend de la complexité de ce que tu veux faire.
 
Si l'objet que tu veux dupliquer est conséquent (genre plein de variables internes...) et surtout si tu veux l'utiliser en tant qu'objet DefaultStyledDocument à part entière (pour réutiliser des méthodes que tu as déjà et qui travaillent sur des objets de type DefaultStyledDocument ), alors oui il vaut mieux en faire une copie complète.
 
Si tu veux juste travailler sur un seul membre de ton objet, ça ne vaut pas forcément la peine. C'était juste ce que je voulais mettre en avant.
 
Le principe du "deep copy" comme tu dis, à mon avis est celui qu'il faut utiliser. Ensuite pour ce qui est de la méthode clone() de la classe Object, d'après la javadoc

Citation :

this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.


 
donc moi je te conseille d'implémenter ton propre copy() (et non clone pr éviter les amalgames) pour êter sur de ce que tu obtiens.


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1385936
predateura​ud
Posté le 12-06-2006 à 17:19:46  profilanswer
 

je vais essayer de t'expliquer ce que je souhaite faire:
 
j'ai un éditeur de texte qui est donc composé d'un Document. J'ai des problèmes concernant les tableaux (puisque le format rtf ne les prend pas en compte). La solution que j'ai adoptée est donc de savoir à l'aide d'un mot clé lorsqu'il y a un tableau dans le texte. Ce texte est récupérable grace a document.getText() (renvoie un string).
 
Ce qui se passe actuellement est que quand j'enregistre mon fichier, il enregistre en faite le document. (texte sans les tableaux). Ce que je souhaite faire est créé une copie (ou un clone) de ce document puis d'y insérer des mots clés :
mot clé pour dire qu'il y a un tableau, suivi du nb de ligne, du nb de colonne puis du contenu (ca on verra plus tard!!)
en résumé, je souhaite que l'utilisateur ne voit que le document actuel
et que derrière, j'ai un autre document, qui est une copie de celui affiché, mais ce document contient d'autres renseignements concernant le tableau. Ce document ne doit évidemment pas être visible par l'utilisateur.
 
j'espère que tu as compris ce que je viens de raconter!!  
pour te repondre, je pense aussi que le principe du 'deep copy' est ce qu'il me faut mais je n'ai absolument pas d"idée sur la manière dont procéder!
Merci de m'aider

n°1385953
wapcamer
Posté le 12-06-2006 à 17:41:40  profilanswer
 

je crois avoir plus ou moins compris, mais à ta place je ferai l'inverse: tu gardes le doc en entier avec tes mot-clefs specifiques, et quand tu veux afficher, tu as p.ex. une méthode renderText() qui te renvoit uniquement le texte que l'utilisateur doit lire.
 
Il faut bien voir que si tu crées 2 documents pour le même texte, tu risque très fortement d'avoir des pb de synchronization entre les deux. Perso j'opterai plutôt pour un seul document qui "présente" les données en fonction de ce que l'on souhaite afficher.
 


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1386224
predateura​ud
Posté le 13-06-2006 à 08:42:17  profilanswer
 

bonjour! me revoilà au boulot!
je vais étudier la méthode renderText() car d'apres ce que tu me racontes, ca serait exactement ce qu'il me faut! merci de ton aide!!!

n°1386250
predateura​ud
Posté le 13-06-2006 à 09:30:59  profilanswer
 

hélas, je ne trouve pas grand chose... cette méthode s'applique a quel type d'objet? dois-je la créer moi même? si quelqu'un a un lien intéressant concernant 'renderText', je suis prenante!

n°1386479
wapcamer
Posté le 13-06-2006 à 13:32:39  profilanswer
 

Désolé de t'avoir donné un faux espoir, mais renderText() c'est juste un exemple pour décrire ce que cette méthode devrait faire. Après l'implémentation effective, c'est à toi de le faire, donc oui tu dois créer une méthode qui prend le document en entier, supprime ce que l'utilisateur n'est pas censé voir et te retourne le champ texte à afficher.
 :hello:  


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1386523
predateura​ud
Posté le 13-06-2006 à 14:25:41  profilanswer
 

supposons que je créée une méthode qui prend mon document, qui récupère la chaine de caractere qui lui est associé, qui supprime ce que l'utilisateur ne doit pas voir et qui renvoie cette chaine de caractère, comment je fais après pour l'afficher? il n'existe pas de méthode setText() pour les documents.  
Ne crois tu pas que le plus simple était ma solution de départ : faire une copie de l'objet Document?
 
Désolée, je suis vraiment paumée!!

n°1387239
wapcamer
Posté le 14-06-2006 à 11:29:47  profilanswer
 

Salut,  
là désolé c'est moi qui suis paumé.
 
L'affichage de ton document, je ne sais pas comment tu as prévu de le faire, mais ça doit être dissocié de ton document. En fait je ne vois pas le problème et surtout pas le rapport.
 
Mais d'abord qq tu veux réellement faire avec ton objet dupliqué, pq ça devient un peu confus là.
 
Et non je ne pense pas que dupliquer ton objet (si c'est pour l'afficher) est une bonne solution. A mon sens, en objet, tu représentes un objet comme tu le concevrais sur le papier. Un document est un et si tu copies ton document, tu as une copie conforme de ce document, mais qui n'est pas ton document. C'en est un autre mais qui a le même texte. Y'a qd m une nuance.
 
 :sarcastic:  
 
 


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1387528
predateura​ud
Posté le 14-06-2006 à 15:40:16  profilanswer
 

salut
 
bon,je récapitule un tit peu :
 
J'ai un JTextPane qui est associé à un DefaultStyledDocument et à un rtfEditorKit.
J'ai reussi a ajouter un tableau à ma zone de texte, cependant, le format rtf ne permet pas leur enregistrement.
La solution que j'ai adoptée est que lorsque je souhaite enregistrer, je parcours mon texte et lorsque je trouve mon mot clé (document.insertString(p, " motCle", attr)) je voudrais avoir une copie de ce document pour que je puisse (sur cette copie) rajouter la taille de mon tableau et son contenu. Ces éléments ne sont que du texte puisque je veux enregistrer en rtf mais l'utilisateur ne doit rien voir à ces rajouts.
Ma copie serait donc la même chose que mon document mais posséderait en plus, les caractéristiques de mon tableau alors que mon document original aurait le tableau dessiné et l'utilisateur ne verrait rien.
 
Mon but est donc de faire une copie de document, je ne pense pas qu'avoir l'original change quelque chose, afin de pouvoir sauvegarder mes tableaux pour les retrouver lors d'une future ouverture du fichier via mon application.
 
J'ai trouvé un petit truc qui permet de faire ce que je veux : créer un nouveau document et faire un insertString afin de lui insérer le texte du document original. Ceci fonctionne mais ne prend absolument pas en compte la mise en forme du texte. J'en conclu donc que ca ne va pas!
 
J'espère avoir été claire, désolée si ma reflexion est mauvaise... :pt1cable:  :(

n°1387654
wapcamer
Posté le 14-06-2006 à 17:21:32  profilanswer
 

Ok, je comprends mieux comme ça.  
D'abord désolé mais je ne suis pas encore upgradé Java1.5. J'en suis resté au 1.4, donc c'est vrai que les EditorKits je connais pas trop. Surtout j'avais mal compris quels objets tu veux utiliser... mea culpa.
 :jap:  
 
En fait pour résumer, tu veux faire du RTF mais en rajoutant des balises spécifiques pour le formatage d'un tableau, j'ai bon ?
J'aurais ta tendance à ta place à créer une classe qui étend RTFEditorKit et qui, lorsque il lit ta balise fais le traitement spécifique que tu veux et sinon fais le traitement par défaut du RTFEditorKit.
Peut-être un JEditorPane est-il aussi plus adapté qu'un JTextPane .
 
Par contre pour ce qui est de la copie du format du texte en plus du texte, je pense que tu devrais regarder du côté des méthodes read et write sur RTFEditorKit plutôt que insertString() (qui sonne "plain text" ).
 
J'espère que ça aide un petit peu.


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1387937
predateura​ud
Posté le 15-06-2006 à 10:25:40  profilanswer
 

bonjour!
 
contente que tu ai compris! en y reflechissant, j'ai aussi un autre problème : je ne connais pas trop non plus les rtfeditorkit!! a force de faire des recherches, j'ai reussi a créer ce que j'voulais mais je ne vois pas trop le lien entre l'editorkit et mon document.
 
La seule fois où ils ont un lien est qd je veux enregistrer le fichier, je fais un: editorKit.write(outputstraeam, document, 0, document.lenght())
ceci engendre l'enregistrement de mon document dans mon fichier. Je pensais donc que ce qu'il fallait que je modifie pour mes tableaus était le document et non l'editorkit. Bref, je sais plus trop!!!
 
En ce qui concerne la possibilité qu'un JEditorPane soit mieux qu'un JTextPane, je n'y pense même pas! Je fini mon stage demain donc je ne vais pas tout reprogrammer!
 
En conclusion, je ne sais plus quoi faire avec ces tableaux! et tu as raison, mon insertString() mémorise que du plain text hélas :(
 
les nouvelles sont donc que j'en suis toujours au même point et qu'il faut que j'étudie rtfeditorkit!
merci de ton aide

n°1388002
wapcamer
Posté le 15-06-2006 à 11:45:15  profilanswer
 

Oui je crains que ça va être un peu chaud d'ici demain, mais hey, c les vacances alors ???
 
veinarde !!
 
Et oui je crains que l'éditorkit, tu as pas trop le choix.
Essaye de chercher des exemples d'implémentation, ce que tu cherches doit pas être très éloigné du RTFEditorKit.
Sinon repose une question sur le forum.
Je suis désolé ça dépasse mes connaissances ( et je dois qd m travailler un peu aussi  ;) )


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1388316
predateura​ud
Posté le 15-06-2006 à 17:03:16  profilanswer
 

oui c'est les vacances mais aussitôt recherche d'emploi!!
 
après quelques recherches, je ne pense pas qu'il faille modifier le rtfeditorkit mais plutot le document. je pense que c'est le document qui mémorise tout... enfin j'en sais rien...
 
bon courage pour ton 'travail'! et encore merci pour tes reponses!

n°1388344
wapcamer
Posté le 15-06-2006 à 17:31:02  profilanswer
 

Bof recherche d'emploi, ne sois pas trop pressée ... Mon conseil: ce sont tes dernières VRAIES vacances, alors profites-en.
Désolé de pas avoir pu aidé plus que ça.
 :hello:


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  dupliquer un objet

 

Sujets relatifs
Validateur de code objetDeterminer si un objet est "serializable"
[java débutant] écrire dans une Jlist depuis un objet indépendant[C#] Les mystères de la représentation mémoire d'un objet Bitmap
[ASP.NET] Utiliser un objet comme propriété d'un WebControlc# Combobox d'objet qui cause problème
instancier un objet a distanceCréer un objet à partir d'une chaîne de caractères
retrouver la largeur du "border style" d'un objetDupliquer un objet, et non faire une référence
Plus de sujets relatifs à : dupliquer un objet


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR