Java中的undo和redo实现

时间:2011-09-10 20:36:59

标签: java list undo-redo

我想问一个关于Java中List的问题。

很容易实现删除,添加和搜索列表中的元素。但是如何在Java中实现列表的撤销和重做?

任何人都可以帮我吗?

4 个答案:

答案 0 :(得分:4)

您可能希望为此实施Command Design Pattern。可以在http://www.algosome.com/articles/implementing-undo-redo-java.html

找到List的一个不错的简化示例

答案 1 :(得分:1)

我想您想要撤消并重做像删除和添加列表等操作。

只需使用具有撤消和重做索引功能的其他列表,例如一个ArrayList:

  • 每次对原始列表添加(元素)或删除(元素)时,都会更改该列表,将元素放在撤消列表的末尾。
  • 然后,当您要撤消操作时,只需浏览撤消列表:如果撤消列表中的元素不在原始列表中,请添加它,如果它存在于原始列表中,则将其删除。
  • 如果你想使用你的撤销列表进行重做,那么不要从撤消列表中删除刚刚“撤消”的元素,而是通过索引移动撤消列表。然后,您可以在两个方向上移动撤消列表,从而撤消并重做您的操作。

答案 2 :(得分:0)

你的意思是从列表中删除项目并撤消它?您可以轻松地为列表创建新类,并定义以下属性:上次执行的操作+存储受影响项目的原始值(以及可能的索引)。重做相同(至少重做和撤消一步)。如果您不关心项目的顺序(或者您可以轻松订购它们),则定义上次执行的操作列表和原始值列表。例如: lastAction [0] = “删除”; lastElement [0] = 1; //表示您从列表中删除了1

这是第一个也是虚构的想法。也许有一些问题需要考虑......

答案 3 :(得分:0)

你需要绑定来做到这一点。

对我而言,这是最有效的方法。 This question在SO可以给你一些关于从哪里开始的提示。