- 所有已实现的接口:
-
Serializable,EventListener,UndoableEditListener,UndoableEdit
UndoManager 管理一个 UndoableEdits 列表,提供了撤销或重做适当编辑的方法。有两种方法可以将编辑添加到 UndoManager 中。直接使用 addEdit 方法添加编辑,或将 UndoManager 添加到支持 UndoableEditListener 的 bean 中。以下示例创建一个 UndoManager 并将其作为 UndoableEditListener 添加到一个 JTextField 中:
UndoManager undoManager = new UndoManager(); JTextField tf = ...; tf.getDocument().addUndoableEditListener(undoManager);
UndoManager 维护一个编辑的有序列表和下一个编辑的索引。下一个编辑的索引要么是当前编辑列表的大小,要么如果调用了 undo,则对应于撤销的最后一个重要编辑的索引。当调用 undo 时,从下一个编辑的索引到最后一个重要编辑的所有编辑都会被撤销,顺序相反。例如,考虑一个包含以下编辑的 UndoManager: A b c D。粗体字母表示重要编辑,斜体和斜体字母表示不重要编辑。
![]() |
| 图1 |
如图1所示,如果刚刚添加了 D,则下一个编辑的索引将为4。调用 undo 导致在 D 上调用 undo 并将下一个编辑的索引设置为3(编辑 c),如下图所示。
![]() |
| 图2 |
最后一个重要编辑是 A,因此再次调用 undo 会依次在 c、b 和 A 上调用 undo,并将下一个编辑的索引设置为0,如下图所示。
![]() |
| 图3 |
调用 redo 导致在下一个编辑的索引和下一个重要编辑之间(或列表末尾)的所有编辑上调用 redo。继续前面的示例,如果调用了 redo,则 redo 将依次在 A、b 和 c 上调用。此外,下一个编辑的索引设置为3(如图2所示)。
向 UndoManager 添加编辑会导致删除从下一个编辑的索引到列表末尾的所有编辑。继续前面的示例,如果添加了一个新编辑 e>,则编辑 D 将从列表中删除(在调用 die 后)。如果 c 没有被下一个编辑包含(c.addEdit(e) 返回 true),或者被其替换(e.replaceEdit(c) 返回 true),则新编辑将添加在 c 之后,如下图所示。
![]() |
| 图4 |
一旦在 UndoManager 上调用了 end,则所有 UndoableEdit 方法都将使用超类行为。有关其行为的更多详细信息,请参阅 CompoundEdit。
与 Swing 的其余部分不同,此类是线程安全的。
警告: 此类的序列化对象将不兼容未来的 Swing 版本。当前的序列化支持适用于短期存储或在运行相同 Swing 版本的应用程序之间的 RMI。从 1.4 版开始,已将所有 JavaBeans 的长期存储支持添加到 java.beans 包中。请参阅 XMLEncoder。
-
Field Summary
Fields declared in class javax.swing.undo.CompoundEdit
editsFields declared in class javax.swing.undo.AbstractUndoableEdit
RedoName, UndoName -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanaddEdit(UndoableEdit anEdit) 如果可能,将一个UndoableEdit添加到此UndoManager中。booleancanRedo()如果可以重做编辑,则返回 true。booleancanUndo()如果可以撤销编辑,则返回 true。boolean如果可以调用undo或redo,则返回 true。void清空撤销管理器,在此过程中向每个编辑发送一个die消息。protected UndoableEdit如果调用redo,则返回要重做的下一个重要编辑。protected UndoableEdit如果调用undo,则返回要撤销的下一个重要编辑。voidend()将此UndoManager转换为普通的CompoundEdit。intgetLimit()返回此UndoManager持有的编辑的最大数量。返回此编辑的可重做形式的描述。返回getUndoPresentationName或getRedoPresentationName中的一个描述。返回此编辑的可撤销形式的描述。voidredo()重做适当的编辑。protected voidredoTo(UndoableEdit edit) 重做从下一个编辑的索引到edit的所有更改,适当更新下一个编辑的索引。voidsetLimit(int l) 设置此UndoManager持有的编辑的最大数量。toString()返回显示和标识此对象属性的字符串。protected voidtrimEdits(int from, int to) 删除指定范围内的编辑。protected void将排队的编辑数量减少到一个大小限制的范围,以下一个编辑的索引为中心。voidundo()撤销适当的编辑。void一个UndoableEditListener方法。void调用undo或redo中的一个方便方法。protected voidundoTo(UndoableEdit edit) 从下一个编辑的索引到edit撤销所有更改,适当更新下一个编辑的索引。Methods declared in class javax.swing.undo.CompoundEdit
die, getPresentationName, isInProgress, isSignificant, lastEditMethods declared in class javax.swing.undo.AbstractUndoableEdit
replaceEdit
-
Constructor Details
-
UndoManager
public UndoManager()创建一个新的UndoManager。
-
-
Method Details
-
getLimit
public int getLimit()返回此UndoManager持有的编辑的最大数量。小于 0 的值表示编辑数量没有限制。- 返回:
-
此
UndoManager持有的编辑的最大数量 - 参见:
-
discardAllEdits
public void discardAllEdits()清空撤销管理器,在此过程中向每个编辑发送一个die消息。- 参见:
-
trimForLimit
protected void trimForLimit()将排队的编辑数量减少到一个大小限制的范围,以下一个编辑的索引为中心。 -
trimEdits
protected void trimEdits(int from, int to) 删除指定范围内的编辑。给定范围内的所有编辑(包括,按照相反顺序)将调用die并从编辑列表中删除。如果from>to,则不会产生任何效果。- 参数:
-
from- 要删除的最小索引 -
to- 要删除的最大索引
-
setLimit
public void setLimit(int l) 设置此UndoManager持有的编辑的最大数量。小于 0 的值表示编辑数量没有限制。如果需要丢弃编辑以缩小限制,则将以它们添加的相反顺序调用die。默认值为 100。- 参数:
-
l- 新限制 - 抛出:
-
RuntimeException- 如果此UndoManager不在进行中(已调用end) - 参见:
-
editToBeUndone
如果调用undo,则返回要撤销的下一个重要编辑。如果没有要撤销的编辑,则返回null。- 返回:
- 要撤销的下一个重要编辑
-
editToBeRedone
如果调用redo,则返回要重做的下一个重要编辑。如果没有要重做的编辑,则返回null。- 返回:
- 要重做的下一个重要编辑
-
undoTo
从下一个编辑的索引到edit撤销所有更改,适当更新下一个编辑的索引。- 参数:
-
edit- 要撤销的编辑 - 抛出:
-
CannotUndoException- 如果其中一个编辑引发CannotUndoException
-
redoTo
从下一个编辑的索引到edit重做所有更改,适当更新下一个编辑的索引。- 参数:
-
edit- 要重做的编辑 - 抛出:
-
CannotRedoException- 如果其中一个编辑引发CannotRedoException
-
undoOrRedo
便利方法,调用undo或redo之一。如果有任何编辑被撤消(下一个编辑的索引小于编辑列表的长度),则调用redo,否则调用undo。- 抛出:
-
CannotUndoException- 如果其中一个编辑引发CannotUndoException -
CannotRedoException- 如果其中一个编辑引发CannotRedoException - 参见:
-
canUndoOrRedo
public boolean canUndoOrRedo()返回true,如果可以调用undo或redo。- 返回:
-
如果调用
canUndoOrRedo有效,则返回true - 参见:
-
undo
撤消适当的编辑。如果已调用end,则调用超类,否则在下一个编辑的索引和最后一个重要编辑之间的所有编辑上调用undo,适当更新下一个编辑的索引。- 指定者:
-
undo在接口UndoableEdit中 - 覆盖:
-
undo在类CompoundEdit中 - 抛出:
-
CannotUndoException- 如果其中一个编辑引发CannotUndoException或没有要撤消的编辑 - 参见:
-
canUndo
public boolean canUndo()返回true,如果可以撤消编辑。如果已调用end,则返回超类的值。否则,如果有任何要撤消的编辑(editToBeUndone返回非null),则返回true。- 指定者:
-
canUndo在接口UndoableEdit中 - 覆盖:
-
canUndo在类CompoundEdit中 - 返回:
- 如果有要撤消的编辑,则返回true
- 参见:
-
redo
重做适当的编辑。如果已调用end,则调用超类。否则,在下一个编辑的索引和下一个重要编辑之间的所有编辑上调用redo,适当更新下一个编辑的索引。- 指定者:
-
redo在接口UndoableEdit中 - 覆盖:
-
redo在类CompoundEdit中 - 抛出:
-
CannotRedoException- 如果其中一个编辑引发CannotRedoException或没有要重做的编辑 - 参见:
-
canRedo
public boolean canRedo()返回true,如果可以重做编辑。如果已调用end,则返回超类的值。否则,如果有任何要重做的编辑(editToBeRedone返回非null),则返回true。- 指定者:
-
canRedo在接口UndoableEdit中 - 覆盖:
-
canRedo在类CompoundEdit中 - 返回:
- 如果有要重做的编辑,则返回true
- 参见:
-
addEdit
将一个UndoableEdit添加到这个UndoManager,如果可能的话。这将删除从下一个编辑的索引到编辑列表末尾的所有编辑。如果已调用end,则不添加编辑并返回false。如果未调用end,则返回true。- 指定者:
-
addEdit在接口UndoableEdit中 - 覆盖:
-
addEdit在类CompoundEdit中 - 参数:
-
anEdit- 要添加的编辑 - 返回:
-
如果
anEdit可以合并到此编辑中,则返回true - 参见:
-
end
public void end()将这个UndoManager转换为普通的CompoundEdit。这将删除所有已经撤消的编辑。- 覆盖:
-
end在类CompoundEdit中 - 参见:
-
getUndoOrRedoPresentationName
便利方法,返回getUndoPresentationName或getRedoPresentationName。如果下一个编辑的索引等于编辑列表的大小,则返回getUndoPresentationName,否则返回getRedoPresentationName。- 返回:
- 撤消或重做名称
-
getUndoPresentationName
返回此编辑的可撤销形式的描述。如果已调用end,则调用超类。否则,如果有要撤消的编辑,则返回将要撤消的下一个重要编辑的值。如果没有要撤消的编辑且未调用end,则返回UIManager属性"AbstractUndoableEdit.undoText"的值。- 指定者:
-
getUndoPresentationName在接口UndoableEdit中 - 覆盖:
-
getUndoPresentationName在类CompoundEdit中 - 返回:
- 此编辑的可撤销形式的描述
- 参见:
-
getRedoPresentationName
返回此编辑的可重做形式的描述。如果已调用end,则调用超类。否则,如果有要重做的编辑,则返回将要重做的下一个重要编辑的值。如果没有要重做的编辑且未调用end,则返回UIManager属性"AbstractUndoableEdit.redoText"的值。- 指定者:
-
getRedoPresentationName在接口UndoableEdit中 - 覆盖:
-
getRedoPresentationName在类CompoundEdit中 - 返回:
- 此编辑的可重做形式的描述
- 参见:
-
undoableEditHappened
一个UndoableEditListener方法。这将使用e.getEdit()调用addEdit。- 指定者:
-
undoableEditHappened在接口UndoableEditListener中 - 参数:
-
e- 将从中添加UndoableEditEvent的UndoableEditEvent - 参见:
-
toString
返回显示和标识此对象属性的字符串。- 覆盖:
-
toString在类CompoundEdit - 返回:
- 该对象的字符串表示形式
-



