2010-05-25 11 views
0

J'ai une application Java et je veux implémenter une option Undo/Redo. la valeur que je veux stocker et que je veux pouvoir récupérer est un entier.Implémente un Undo/Redo dans MVC

ma classe Model implémente l'interface StateEditable et je dois redéfinir les 2 fonctions restoreState(Hashtable<?, ?> state) et storeState(Hashtable<Object, Object> state) mais je ne sais pas quoi mettre sur eux. Ce sera vraiment génial si quelqu'un peut m'aider à faire ça. Ce sont les premières lignes de ma classe Model, la valeur que je veux faire un undo/redo sur elle est value

public class Model extends Observable implements StateEditable 
{ 
     private int value = 5; 

     private UndoManager undoRedo = new UndoManager(); 

     final UndoableEditListener editListener = new UndoableEditListener() { 
     public void undoableEditHappened(UndoableEditEvent evt) { 
      undoRedo.addEdit(evt.getEdit()); 
      } 
     }; 

     @Override 
     public void restoreState(Hashtable<?, ?> state) 
     { 

     } 

     @Override 
     public void storeState(Hashtable<Object, Object> state) 
     { 

     } 
} 

Répondre

1

De la recherche à travers un example of StateEditable, il semblerait que dans votre méthode storeState, vous avez besoin pour remplir le Hashtable qui est transmis po De même, vous affectez l'état dans votre restoreState à partir du Hashtable qui est transmis. Vous devrez définir une clé pour la valeur dans le Hashtable. Dans cet esprit, je vous suggère d'ajouter

private final String KEY = "myKey"; 

en haut de votre fichier, puis remplir les deux méthodes comme ceci:

@Override 
    public void restoreState(Hashtable<?, ?> state) 
    { 
     Object val = state.get(KEY); 
     if(val instanceof Integer) //performs the null test for us. 
     { 
      value = val; 
     } 
    } 

    @Override 
    public void storeState(Hashtable<Object, Object> state) 
    { 
     state.put(KEY, value); 
    }