javax.swing.undo

接口
异常
所有已知实现类:
AbstractDocument.DefaultDocumentEvent, AbstractDocument.ElementEdit, AbstractUndoableEdit, CompoundEdit, DefaultStyledDocument.AttributeUndoableEdit, StateEdit, UndoManager

public interface UndoableEdit

UndoableEdit 表示一个编辑。该编辑可被撤消,如果已撤消,该编辑可恢复。

设计 UndoableEditUndoManager 一起使用。由于 UndoableEdit 是由 UndoableEditListener 生成的,所以通常将它们添加到 UndoManager。当将 UndoableEdit 添加到 UndoManager 时,会发生以下事件(假定没有在 UndoManager 上调用 end):

  1. 如果 UndoManager 包含编辑,则它将在当前编辑上调用 addEdit,传入新的编辑作为参数。如果 addEdit 返回 true,则新的编辑被视为已合并到当前编辑中,并且不会将新的编辑添加到当前编辑列表。编辑可以使用 addEdit 将多个较小编辑合并到较大编辑中,并且将合并后的编辑视为单个编辑。
  2. 如果 addEdit 返回 false,则以传入的当前编辑对新的编辑调用 replaceEdit。这与 addEdit 截然相反 — 如果新的编辑从 replaceEdit 返回 true,则新的编辑将替换当前编辑。
UndoManager 使用 isSignificant 确定应该撤消或恢复多少编辑。 UndoManager 将撤消或恢复当前编辑与最后一个或下一个有效编辑之间的所有无效编辑( isSignificant 返回 false)。 addEditreplaceEdit 可用于将多个编辑视为单个编辑,从 isSignificant 返回 false 允许 treating 可用于一次撤消或恢复多个较小编辑。也可以使用 addEdit 方法完成类似的功能。


方法摘要
 boolean addEdit(UndoableEdit anEdit)
          将 UndoableEdit 添加到此 UndoableEdit
 boolean canRedo()
          如果可以恢复此编辑,则返回 true。
 boolean canUndo()
          如果可以撤消此编辑,则返回 true。
 void die()
          通知某个编辑不应再使用它。
 String getPresentationName()
          返回此编辑的本地化可读描述,例如,适于在更改日志中使用。
 String getRedoPresentationName()
          返回此编辑可恢复形式的本地化可读描述,例如,适于用作 “Redo” 菜单项。
 String getUndoPresentationName()
          返回此编辑可撤消形式的本地化可读描述,例如,适于用作 “Undo” 菜单项。
 boolean isSignificant()
          如果认为此编辑有效,则返回 true。
 void redo()
          重新应用编辑。
 boolean replaceEdit(UndoableEdit anEdit)
          如果此 UndoableEdit 应替换 anEdit,则返回 true。
 void undo()
          撤消编辑。
 

方法详细信息

undo

void undo()
          throws CannotUndoException
撤消编辑。

抛出:
CannotUndoException - 如果不能撤消此编辑

canUndo

boolean canUndo()
如果可以撤消此编辑,则返回 true。

返回:
如果可以撤消此编辑,则返回 true

redo

void redo()
          throws CannotRedoException
重新应用编辑。

抛出:
CannotRedoException - 如果不能恢复此编辑

canRedo

boolean canRedo()
如果可以恢复此编辑,则返回 true。

返回:
如果可以恢复此编辑,则返回 true

die

void die()
通知某个编辑不应再使用它。一旦将 UndoableEdit 标记为停用,则不能再对它进行撤消或恢复。

对于不可能撤消或恢复时清除不再需要的状态而言,这是一个有用的钩子 (hook)。例如,删除不能再恢复的对象所使用的文件资源。UndoManager 在其离开编辑队列之前调用它。

注意,这是一个单向操作。不存在 "un-die" 方法。

另请参见:
CompoundEdit.die()

addEdit

boolean addEdit(UndoableEdit anEdit)
UndoableEdit 添加到此 UndoableEdit。此方法可用于将多个较小编辑合并为一个较大的复合编辑。例如,文本编辑器通常允许对单词或句子应用撤消操作。文本编辑器可以选择在每个关键事件上生成编辑,但允许将这些编辑合并为一个更加用户友好的单元,比如一个单词。在这种情况下,当可以合并编辑时, UndoableEdit 将重写 addEdit 以返回 true。

返回值为 true 指示已将 anEdit 合并到此编辑。返回值为 false 指示不能将 anEdit 合并到此编辑。

通常,接收者已经在 UndoManager(或者其他 UndoableEditListener)队列中,并且可以合并 anEdit,而不是将它按顺序添加到队列中。

如果返回 true,则从现在开始,anEdit 必须从 canUndocanRedo 返回 false,并且必须对 undoredo 抛出适当的异常。

参数:
anEdit - 要添加的编辑
返回:
如果可以将 anEdit 合并到此编辑,则返回 true

replaceEdit

boolean replaceEdit(UndoableEdit anEdit)
如果此 UndoableEdit 应替换 anEdit,则返回 true。此方法由 CompoundEditUndoManager 使用;如果不能将 anEdit 添加到当前编辑( addEdit 返回 false),则调用此方法。

此方法提供了某个编辑替换现有编辑的方法。

此消息与 addEdit 相反 -- anEdit 通常已经在 UndoManager(或者其他 UndoableEditListener)的队列中,并且接收者可以替换它。

如果返回 true,则从现在开始,anEdit 必须从 canUndo() 和 canRedo() 返回 false,并且必须对 undo() 或 redo() 抛出适当的异常。

参数:
anEdit - 替换当前编辑的编辑
返回:
如果此编辑应该替换 anEdit,则返回 true

isSignificant

boolean isSignificant()
如果认为此编辑有效,则返回 true。有效编辑通常是指应该呈现给用户的编辑,可能在菜单项或工具提示上。 UndoManager 将为下一个有效编辑撤消或恢复所有无效编辑。

返回:
如果此编辑有效,则返回 true

getPresentationName

String getPresentationName()
返回此编辑的本地化可读描述,例如,适于在更改日志中使用。

返回:
此编辑的描述

getUndoPresentationName

String getUndoPresentationName()
返回此编辑可撤消形式的本地化可读描述,例如,适于用作 “Undo” 菜单项。此方法通常派生自 getPresentationName

返回:
此编辑可撤消形式的描述

getRedoPresentationName

String getRedoPresentationName()
返回此编辑可恢复形式的本地化可读描述,例如,适于用作 “Redo” 菜单项。此方法通常派生自 getPresentationName

返回:
此编辑可恢复形式的描述