我正在开发一个非常基本的形状绘制GUI程序。我有一切工作(绘制/移动/选择),我现在正在处理重做/撤消功能。重做/撤消都可以用于绘制,但我遇到了移动问题,我认为应该非常简单。当我的形状移动时,它们会经历以下内容:
for(IShape i : selectedList){
undoStack.push(i);
drawInstanceTwo.shapeList.remove(i);
move.updateShape(i, start, end);
drawInstanceTwo.shapeList.push(i, canvas, state);
}
这里的想法是它将形状当前形状(点x / y)推到undoStack上,这样如果我想撤消移动,我可以在按下撤销按钮时从堆栈中弹出它。 Move.updateShape更改形状的点,然后将其推到我的整体shapeList上以重新绘制GUI。我遇到的问题是稍后在我的撤销方法中我打电话:
priorShape = undoStack.pop();
它会在点变化后返回形状。为什么是这样?我已经把它推到堆栈中,因为它是在编辑点之前,所以为什么它在堆栈中发生变化?谢谢你的任何建议!