2010-05-25 68 views
0

我有一个Java应用程序,我想实现一个撤消/重做选项。我想要存储的价值以及我希望能够恢复的价值是一个整数。在MVC中实现撤销/重做

Model类实现了接口StateEditable,我必须重新定义2个功能restoreState(Hashtable<?, ?> state)storeState(Hashtable<Object, Object> state),但我不知道要放什么东西在他们身上。如果有人能帮助我这么做,那将会非常棒。 这些都是我Model上课的第一线,是我想要做的撤销/重做它是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) 
     { 

     } 
} 

回答

1

从通过example of StateEditable看,它会出现在你的storeState方法,你需要的值以填充传入的Hashtable。同样,您从传入的Hashtable中为restoreState分配状态。您需要为Hashtable中的值定义一个键。考虑到这一点,我建议你添加

private final String KEY = "myKey"; 

你的文件的顶部,然后填写像两种方法这样:

@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); 
    }