使用ArrayList撤消操作

时间:2014-10-31 12:10:08

标签: java arraylist

我想为我的绘图应用程序实现撤消和重做操作。

我创建了一个从jpanel扩展的类,这里我有arraylist来保留我的jpanel上的所有元素。

当我添加新元素时,它是如何工作的(f.e我用铅笔工具绘制的东西):

this.elements.add(new PencilElement(this.tool.getPPoint(), this.tool.getCPoint(), this.tool.getColor(), this.tool.getStroke()));

我想使用另一个arraylist来保存所有元素的副本,当我点击“撤消”按钮时: - >临时数组列表中的最后一个元素将被删除 - >基本arraylist的内容(在这种情况下“元素”arraylist)将被此临时arraylist内容替换。

如果您有其他想法,请分享

谢谢!

2 个答案:

答案 0 :(得分:0)

如果要进行重做,则不应删除第二个ArrayList中的最后一个元素,因为重做时需要它。

答案 1 :(得分:0)

使用Deque(Why should I use Deque over Stack?

创建堆栈

建议也是使用堆栈进行操作,这样你就可以从普通的动作堆栈中弹出并推送撤销堆栈,反之则重做。

//当前解决方案的建议

private Deque<PencilElement> undoStack = new ArrayDeque<PencilElement>();

//whenUndo
undoStack.addFirst(myPencilElement);

//whenRedo
elements.add(undoStack.removeFirst());


//New suggestion
//whenUndo
undoStack.addFirst(elements.removeFirst());

//whenRedo
elements.add(undoStack.removeFirst());

还确保在堆栈上没有操作时禁用重做