- 所有已实现的接口:
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 结果调用 undoD并将下一次编辑的索引设置为 3(编辑c),如下图所示。
![]() |
| 图 2 |
最后的重要编辑是A, 因此调用 undo 再次调用 undo onc, b, 和A, 依次将下一次编辑的索引设置为0,如下图所示。
![]() |
| 图 3 |
调用 redo 会导致对下一个编辑的索引和下一个重要编辑(或列表末尾)之间的所有编辑调用 redo。继续前面的示例,如果调用了 redo,则将依次调用 redoA, b和c.此外,下一次编辑的索引设置为 3(如 图 2 所示)。
将编辑添加到 UndoManager 会导致从下一个编辑的索引到列表末尾删除所有编辑。继续前面的例子,如果一个新的编辑,e, 添加编辑D从列表中删除(在调用 die 之后)。如果c未被下一个编辑合并(c.addEdit(e) 返回 true),或被它替换(e.replaceEdit(c) 返回 true),新编辑在之后添加c,如下图所示。
![]() |
| 图 4 |
一旦在 UndoManager 上调用了 end,超类行为将用于所有 UndoableEdit 方法。有关其行为的更多详细信息,请参阅 CompoundEdit。
与 Swing 的其余部分不同,此类是线程安全的。
Warning: 此类的序列化对象将与未来的 Swing 版本不兼容。当前的序列化支持适用于运行相同版本 Swing 的应用程序之间的短期存储或 RMI。从 1.4 开始,对所有 JavaBeans 的长期存储的支持已添加到 java.beans 包中。请参阅 XMLEncoder 。
-
字段摘要
在类 javax.swing.undo.CompoundEdit 中声明的字段
edits在类 javax.swing.undo.AbstractUndoableEdit 中声明的字段
RedoName, UndoName -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述booleanaddEdit(UndoableEdit anEdit) 如果可能的话,向这个UndoManager添加一个UndoableEdit。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的所有更改,适当地更新下一次编辑的索引。在类 javax.swing.undo.CompoundEdit 中声明的方法
die, getPresentationName, isInProgress, isSignificant, lastEdit在类 javax.swing.undo.AbstractUndoableEdit 中声明的方法
replaceEdit
-
构造方法详细信息
-
UndoManager
public UndoManager()创建一个新的UndoManager。
-
-
方法详情
-
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- 如果其中一项编辑抛出CannotUndoExceptionCannotRedoException- 如果其中一项编辑抛出CannotRedoException- 参见:
-
canUndoOrRedo
public boolean canUndoOrRedo()如果可以调用undo或redo则返回 true。- 返回:
-
如果调用
canUndoOrRedo有效则为真 - 参见:
-
undo
撤消适当的编辑。如果end已被调用,则调用超类,否则将对下一个编辑的索引和最后一个重要编辑之间的所有编辑调用undo,适当地更新下一个编辑的索引。- 指定者:
undo在接口UndoableEdit中- 重写:
undo在类CompoundEdit中- 抛出:
CannotUndoException- 如果其中一项编辑抛出CannotUndoException或者没有要撤消的编辑- 参见:
-
canUndo
public boolean canUndo()如果可以撤消编辑,则返回 true。如果调用了end,则返回 super 的值。否则,如果有任何编辑要撤消,则返回 true(editToBeUndone返回非null)。- 指定者:
canUndo在接口UndoableEdit中- 重写:
canUndo在类CompoundEdit中- 返回:
- 如果有要撤消的编辑,则为真
- 参见:
-
redo
重做适当的编辑。如果end已被调用,则调用超类。否则,这将对下一个编辑的索引和下一个重要编辑之间的所有编辑调用redo,适当地更新下一个编辑的索引。- 指定者:
redo在接口UndoableEdit中- 重写:
redo在类CompoundEdit中- 抛出:
CannotRedoException- 如果其中一个编辑抛出CannotRedoException或者没有要重做的编辑- 参见:
-
canRedo
public boolean canRedo()如果可以重做编辑,则返回 true。如果调用了end,则返回 super 的值。否则,如果有任何编辑要重做(editToBeRedone返回非null),则返回 true。- 指定者:
canRedo在接口UndoableEdit中- 重写:
canRedo在类CompoundEdit中- 返回:
- 如果有要重做的编辑则为真
- 参见:
-
addEdit
如果可能的话,向这个UndoManager添加一个UndoableEdit。这将删除从下一个编辑的索引到编辑列表末尾的所有编辑。如果end已被调用,则不会添加编辑并返回false。如果尚未调用end,则返回true。- 指定者:
addEdit在接口UndoableEdit中- 重写:
addEdit在类CompoundEdit中- 参数:
anEdit- 要添加的编辑- 返回:
-
如果
anEdit可以合并到此编辑中,则为真 - 参见:
-
end
public void end()把这个UndoManager变成一个普通的CompoundEdit。这将删除所有已撤消的编辑。- 重写:
end在类CompoundEdit中- 参见:
-
getUndoOrRedoPresentationName
返回getUndoPresentationName或getRedoPresentationName的便捷方法。如果下一个编辑的索引等于编辑列表的大小,则返回getUndoPresentationName,否则返回getRedoPresentationName。- 返回:
- 撤消或重做名称
-
getUndoPresentationName
返回此编辑的可撤消形式的描述。如果end已被调用,则调用 super。否则,如果有要撤消的编辑,这将返回下一个将被撤消的重要编辑的值。如果没有要撤消的编辑并且尚未调用end,则返回UIManager属性“AbstractUndoableEdit.undoText”中的值。- 指定者:
getUndoPresentationName在接口UndoableEdit中- 重写:
getUndoPresentationName在类CompoundEdit中- 返回:
- 此编辑的可撤销形式的描述
- 参见:
-
getRedoPresentationName
返回此编辑的可重做形式的描述。如果end已被调用,则调用 super。否则,如果有要重做的编辑,这将返回下一个将重做的重要编辑的值。如果没有要重做的编辑并且尚未调用end,则返回UIManager属性“AbstractUndoableEdit.redoText”中的值。- 指定者:
getRedoPresentationName在接口UndoableEdit中- 重写:
getRedoPresentationName在类CompoundEdit中- 返回:
- 此编辑的可重做形式的描述
- 参见:
-
undoableEditHappened
一个UndoableEditListener方法。这会调用addEdit和e.getEdit()。- 指定者:
undoableEditHappened在接口UndoableEditListener中- 参数:
e-UndoableEditEventUndoableEditEvent将从- 参见:
-
toString
返回显示和标识此对象属性的字符串。- 重写:
toString在类CompoundEdit中- 返回:
- 此对象的字符串表示形式
-



