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

AWT/Swing Java Discussion :

Question, Action annuler/retablir.


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Par défaut Question, Action annuler/retablir.
    Bonjour,
    Je vous expose mon problème.
    Mon interface est composée d'un Jtree et d'une Jtable.
    Plusieurs opérations sont possibles sur la tree (supprimer un élément/noeud, ajouter un élément, fusionner plusieurs éléments, etc...). les opérations effectuée sur la Tree, mettent à jour la Table.
    Je veut faire un système Annuler / rétablir les dernières actions effectuées par l'utilisateur.
    A chaque action de l'utilisateur je sauvegarde ma Tree et ma table.
    et lors du click utilisateur sur le bouton annuler je charge la tree et la table précédemment sauvegardées.

    mon problème est que les nouvelles actions sur la Tree mettent aussi à jour les éléments sauvegardés ...
    mon système Annuler / rétablir est composé de 2 tableau d'élément SaveComponent, je lis ces tableaux lors des click sur les boutons "annuler", "rétablir", et les recharge.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public class SaveComponent 
    {
    	private JTree tree;
    	private JTable table;
    	private String text;
     
    	public SaveComponent( JTree tree, JTable table, String text ) 
    	{
    		this.tree = tree;
    		this.table = table;
    		this.text = text;
    	}
     
    	public JTree getTree() {
    		return tree;
    	}
     
            .......
    }
    J'espère avoir été le plus clair possible, sinon n'hésitez pas à me demander un complément d'information.

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Bonjour,

    mon problème est que les nouvelles actions sur la Tree mettent aussi à jour les éléments sauvegardés ...
    Il faut que tu instancie une nouvelle table et une nouvelle tree car sinon tu utilises toujours le même objet. Donc des que tu le modifies, tu modifies ces copies en même temps.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Par défaut
    @tupac25
    Merci d'avoir pris le temps de me répondre.

    Il faut que tu instancie une nouvelle table et une nouvelle tree car sinon tu utilises toujours le même objet. Donc des que tu le modifies, tu modifies ces copies en même temps.
    C'est effectivement ce que j'ai remarqué, le hic c'est comment instancie tu une nouvelle tree, tout en copiant le modèle de l'ancienne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    j'ai fait ceci : 
    private JTree treeSave = new JTree( tree.getModel() ) ;
    à la place de :
    private JTree treeSave = tree;
    le problème persiste malgré tout et la modification de "tree" entraine celle de "treeSave".

    Merci d'avance.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Il te faut aussi une nouvelle instanciation du TreeModel car sinon tu modifies le modele des 2 JTree.

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le problème ici n'est pas le JTree ou la JTable, mais plutôt leurs modèles respectifs.

    Dans le cas présent deux possibilités, dépendant de la taille des modèles.

    Pour des modèles plutôt légers, il suffit de les rendre clonable, c'est à dire de faire en sorte qu'il implémente bien l'interface Clonable et qu'il redéfinisse la méthode clone() pour qu'elle revoie un nouveau modèle ne portant pas de références sur le modèle actuels et ses éléments internes, puis de les stocker dans des listes, qui elles seront placées dans l'UndoManager qui doit être commun aux deux composants. Puis de jouer sur la méthode setModel.

    Dans le cas de modèles volumineux il est préférable de stocker uniquement le changements atomiques (genre ajout de telle ligne, fusion de telles autres, suppression, modification & cie) dans une structure appropriée. Et par la suite d'appliquer les modifications inverses directement sur les données du modèle pour effectuer l'undo.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Par défaut
    Merci beaucoup pour vos réponses et votre aide.

    @sinok
    Merci pour ta solution et tes explications, je ne connaissais pas l'interface clonable.

    Je vais tester cela de suite.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Par défaut
    Alors J'ai réussi !
    je me suis aussi appuyer de ce topic en cherchant des exemple implémentant cloneable car n'y arrivant pas : http://stackoverflow.com/questions/1...cating-a-jtree.
    et le bout de code que donne "nkr1pt" marche.

    Encore une fois, je vous remercie pour votre aide et du temps que vous m'avez consacré.

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

Discussions similaires

  1. [XL-2003] Question action sur "Liste Déroulante"
    Par malpas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/08/2010, 11h15
  2. [Upload] Erreur 'Action annulée' lors d'un upload
    Par SegmentationFault dans le forum Langage
    Réponses: 8
    Dernier message: 31/07/2006, 15h12
  3. Annuler seulement certaines actions d'1 trigger for each row
    Par thebloodyman dans le forum Oracle
    Réponses: 8
    Dernier message: 28/02/2005, 14h17
  4. [Struts][struts-config.xml] question sur l element action
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 3
    Dernier message: 08/10/2004, 16h25
  5. [Struts] question bete sur les Action et Form
    Par seb_fou dans le forum Struts 1
    Réponses: 2
    Dernier message: 06/09/2004, 15h24

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