- 所有已知的实现类:
-
AbstractDocument.DefaultDocumentEvent
,AbstractDocument.ElementEdit
,AbstractUndoableEdit
,CompoundEdit
,DefaultStyledDocument.AttributeUndoableEdit
,StateEdit
,UndoManager
public interface UndoableEdit
UndoableEdit
表示一个编辑。该编辑可以被撤消,或者如果已经被撤消,则可以重新执行。
UndoableEdit
设计用于与UndoManager
一起使用。由于UndoableEdit
是由UndoableEditListener
生成的,因此它们通常被添加到UndoManager
中。当UndoableEdit
被添加到UndoManager
时,会发生以下情况(假设UndoManager
上尚未调用end
):
- 如果
UndoManager
包含编辑,则将在当前编辑上调用addEdit
,并将新编辑作为参数传递。如果addEdit
返回true,则假定新编辑已合并到当前编辑中,并且新编辑不会被添加到当前编辑列表中。编辑可以使用addEdit
作为较小编辑合并到较大编辑中并被视为单个编辑的一种方式。 - 如果
addEdit
返回false,则会调用replaceEdit
,并将当前编辑作为参数传递给新编辑。这是addEdit
的反向操作 - 如果新编辑从replaceEdit
返回true,则新编辑将替换当前编辑。
UndoManager
利用isSignificant
来确定应撤消或重做多少次编辑。UndoManager
将撤消或重做当前编辑和上一个或下一个重要编辑之间的所有不重要编辑(isSignificant
返回false)。通过从isSignificant
返回false,addEdit
和replaceEdit
可用于将多个编辑视为单个编辑,从addEdit
方法也可以实现类似的功能。
-
Method Summary
Modifier and TypeMethodDescriptionboolean
addEdit
(UndoableEdit anEdit) 将一个UndoableEdit
添加到此UndoableEdit
。boolean
canRedo()
如果此编辑可以重新执行,则返回true。boolean
canUndo()
如果此编辑可以撤消,则返回true。void
die()
通知编辑不应再使用。返回此编辑的本地化、人类可读的描述,适合在更改日志中使用。返回此编辑的可重做形式的本地化、人类可读的描述,适合用作“重做”菜单项等。返回此编辑的可撤销形式的本地化、人类可读的描述,适合用作“撤销”菜单项等。boolean
如果此编辑被认为是重要的,则返回true。void
redo()
重新应用此编辑。boolean
replaceEdit
(UndoableEdit anEdit) 如果此UndoableEdit
应替换anEdit
,则返回true。void
undo()
撤消编辑。
-
Method Details
-
undo
撤消编辑。- 抛出:
-
CannotUndoException
- 如果此编辑无法撤消
-
canUndo
boolean canUndo()如果此编辑可以撤消,则返回true。- 返回:
- 如果此编辑可以撤消,则返回true
-
redo
重新应用此编辑。- 抛出:
-
CannotRedoException
- 如果此编辑无法重新执行
-
canRedo
boolean canRedo()如果此编辑可以重新执行,则返回true。- 返回:
- 如果此编辑可以重新执行,则返回true
-
die
void die()通知编辑不应再使用。一旦将UndoableEdit
标记为无效,它将无法再被撤消或重新执行。这是一个有用的钩子,用于在无法再执行撤消或重做操作时清理不再需要的状态 - 例如,删除对象使用的文件资源,这些对象无法再被撤销。在
UndoManager
在出队编辑之前调用此方法。请注意,这是一个单向操作。没有“取消死亡”的方法。
- 参见:
-
addEdit
将一个UndoableEdit
添加到此UndoableEdit
。此方法可用于将较小的编辑合并为较大的复合编辑。例如,文本编辑器通常允许撤消操作应用于单词或句子。文本编辑器可能选择在每个键事件上生成编辑,但允许将这些编辑合并为更用户友好的单元,例如单词。在这种情况下,UndoableEdit
将覆盖addEdit
,以便在编辑可以合并时返回true。返回true表示
anEdit
已合并到此编辑中。返回false表示anEdit
可能无法合并到此编辑中。通常,接收者已经在
UndoManager
(或其他UndoableEditListener
)的队列中,并且正在有机会合并anEdit
,而不是让其依次添加到队列中。如果从现在开始返回true,则
anEdit
必须从canUndo
和canRedo
返回false,并且必须在undo
或redo
上抛出适当的异常。- 参数:
-
anEdit
- 要添加的编辑 - 返回:
-
如果
anEdit
可以合并到此编辑中,则返回true
-
replaceEdit
如果此UndoableEdit
应替换anEdit
,则返回true。此方法由CompoundEdit
和UndoManager
使用;如果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()返回此编辑的可撤销形式的本地化、人类可读的描述,适合用作“撤销”菜单项等。通常从getPresentationName
派生。- 返回:
- 此编辑的可撤销形式的描述
-
getRedoPresentationName
String getRedoPresentationName()返回此编辑的可重做形式的本地化、人类可读的描述,适合用作“重做”菜单项等。通常从getPresentationName
派生。- 返回:
- 此编辑的可重做形式的描述
-