在MVC中实现撤消/重做

时间:2010-05-25 11:51:28

标签: java model-view-controller undo-redo

我有一个Java应用程序,我想实现一个Undo / Redo选项。我想要存储的值以及我希望能够恢复的值是一个整数。

我的班级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 个答案:

答案 0 :(得分:1)

通过查看example of StateEditable,您的storeState方法似乎需要填充传入的Hashtable。同样,您在{restoreState中分配状态1}}来自传入的Hashtable。您需要为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);
    }