【问题标题】:the undo and redo implementation in JavaJava中的撤消和重做实现
【发布时间】:2011-11-14 12:43:07
【问题描述】:

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

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

谁能帮我解决这个问题?

【问题讨论】:

  • 什么是“列表的撤消和重做”?
  • 例如,删除了一个元素,然后我想撤消它,所以我可以将它添加回来
  • 这些肯定不是 List 类的标准操作。

标签: java list undo-redo


【解决方案1】:

您可能希望为此实现Command Design PatternList 的一个体面的简化示例可以在这里找到 http://www.algosome.com/articles/implementing-undo-redo-java.html

【讨论】:

    【解决方案2】:

    您的意思是从列表中删除项目并撤消它?您可以轻松地为列表创建新类并定义属性,例如:上次执行的操作 + 存储受影响项目的原始值(可能还有索引)。重做也是如此(至少在重做和撤消中的一个步骤)。如果您不关心项目的顺序(或者您可以轻松地订购它们),那么定义最后执行的操作列表和原始值列表。例如: lastAction[0]="删除"; 最后一个元素[0] = 1; // 表示你从列表中删除了 1

    这是第一个也是愚蠢的想法。或许还有一些问题需要考虑……

    【讨论】:

      【解决方案3】:

      我猜你想撤消和重做删除和添加列表等操作。

      只需为撤消和重做使用另一个具有索引功能的列表,例如一个数组列表:

      • 每次对原始列表添加(元素)或删除(元素)确实更改了该列表,您将元素放在撤消列表的末尾。
      • 然后当你想撤消操作时,你只需在撤消列表中移动:如果撤消列表中的元素不在原始列表中,则添加它,如果它存在于原始列表中,则将其删除.
      • 如果您也想使用撤消列表进行重做,请不要从撤消列表中删除刚刚“撤消”的元素,而是通过索引在撤消列表中移动。然后,您可以双向移动撤消列表,从而撤消和重做您的操作。

      【讨论】:

        【解决方案4】:

        你需要绑定才能做到这一点。

        对我来说,这是最有效的方法。 SO 的This question 可以为您提供一些关于从哪里开始的提示。

        【讨论】:

          猜你喜欢
          • 2014-04-20
          • 2016-02-18
          • 1970-01-01
          • 2012-06-02
          • 2012-02-08
          • 2011-03-10
          • 2015-08-10
          • 2012-04-08
          • 2021-06-04
          相关资源
          最近更新 更多