- java.lang.Object
-
- javax.swing.undo.AbstractUndoableEdit
-
- javax.swing.undo.CompoundEdit
-
- javax.swing.undo.UndoManager
-
- 实现的所有接口
-
Serializable
,EventListener
,UndoableEditListener
,UndoableEdit
public class UndoManager extends CompoundEdit implements UndoableEditListener
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 D。 带粗体的大写字母的编辑很重要,小写和斜体的编辑是微不足道的。如figure 1所示,如果刚刚添加D ,则下一次编辑的索引将为4.调用
Figure 2 Figure 2undo
导致在D上调用undo
并将下一次编辑的索引设置为3(编辑c ),如下图所示。最后一次重要编辑是A ,因此调用
Figure 3 Figure 3undo
再次undo
undo
调用c , 和A上的undo
,将下一个编辑的索引设置为0,如下图所示。调用
redo
导致在下一个编辑的索引和下一个重要编辑(或列表末尾)之间的所有编辑上调用redo
。 与前面的例子,如果继续redo
被调用,redo
将依次在A,B和C调用。 此外,下一个编辑的索引设置为3(如figure 2中所示)。将编辑添加到
Figure 4 Figure 4UndoManager
导致从下一个编辑的索引中删除所有编辑到列表末尾。 继续前面的示例,如果添加了新的编辑 ,则从列表中删除编辑D (在调用die
之后)。 如果c未被下一次编辑合并(c.addEdit(e)
返回true),或被其替换(e.replaceEdit(c)
返回true),则在c后添加新编辑,如下图所示。在
end
上调用UndoManager
,超类行为将用于所有UndoableEdit
方法。 有关其行为的更多详细信息,请参阅CompoundEdit
。与Swing的其余部分不同,此类是线程安全的。
警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始,对
java.beans
软件包中添加了对所有JavaBeansjava.beans
长期存储的支持。 请参阅XMLEncoder
。- 另请参见:
- Serialized Form
-
-
字段汇总
-
声明的属性在类 javax.swing.undo.CompoundEdit
edits
-
声明的属性在类 javax.swing.undo.AbstractUndoableEdit
RedoName, UndoName
-
-
构造方法摘要
构造方法 构造器 描述 UndoManager()
创建一个新的UndoManager
。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 boolean
addEdit(UndoableEdit anEdit)
如果可能的话,将UndoableEdit
添加到此UndoManager
。boolean
canRedo()
如果可以重做编辑,则返回true。boolean
canUndo()
如果可以撤消编辑,则返回true。boolean
canUndoOrRedo()
如果可以调用undo
或redo
,则返回true。void
discardAllEdits()
清空撤消管理器在此过程中发送每个编辑die
消息。protected UndoableEdit
editToBeRedone()
如果调用redo
则返回要重做的下一个重要编辑。protected UndoableEdit
editToBeUndone()
如果调用undo
则返回要撤消的下一个重要编辑。void
end()
将此UndoManager
变为正常CompoundEdit
。int
getLimit()
返回此UndoManager
保存的最大编辑数。String
getRedoPresentationName()
返回此编辑的可重做形式的说明。String
getUndoOrRedoPresentationName()
返回getUndoPresentationName
或getRedoPresentationName
便捷方法。String
getUndoPresentationName()
返回此编辑的可撤消形式的说明。void
redo()
重做相应的编辑。protected void
redoTo(UndoableEdit edit)
重做从下一个编辑的索引的所有变化edit
,适当地更新下一个编辑的索引。void
setLimit(int l)
设置此UndoManager
包含的最大编辑数。String
toString()
返回显示和标识此对象属性的字符串。protected void
trimEdits(int from, int to)
删除指定范围内的编辑。protected void
trimForLimit()
将排队编辑的数量减少到一个大小限制范围,以下一个编辑的索引为中心。void
undo()
撤消相应的编辑。void
undoableEditHappened(UndoableEditEvent e)
一种UndoableEditListener
方法。void
undoOrRedo()
调用undo
或redo
之一的便捷方法。protected void
undoTo(UndoableEdit edit)
撤消从下一个编辑索引到edit
所有更改,适当更新下一个编辑的索引。-
声明方法的类 javax.swing.undo.CompoundEdit
die, getPresentationName, isInProgress, isSignificant, lastEdit
-
声明方法的类 javax.swing.undo.AbstractUndoableEdit
replaceEdit
-
-
-
-
方法详细信息
-
getLimit
public int getLimit()
返回此UndoManager
保存的最大编辑数。 小于0的值表示编辑的数量不受限制。- 结果
-
UndoManager
拥有的最大编辑数 - 另请参见:
-
addEdit(javax.swing.undo.UndoableEdit)
,setLimit(int)
-
discardAllEdits
public void discardAllEdits()
清空撤消管理器在此过程中发送每个编辑die
消息。
-
trimForLimit
protected void trimForLimit()
将排队编辑的数量减少到一个大小限制范围,以下一个编辑的索引为中心。
-
trimEdits
protected void trimEdits(int from, int to)
删除指定范围内的编辑。 给定范围内的所有编辑(包括和以相反顺序)将die
调用die
,并从编辑列表中删除。 如果from
>to
。- 参数
-
from
- 要删除的最小索引 -
to
- 要删除的最大索引
-
setLimit
public void setLimit(int l)
设置此UndoManager
保存的最大编辑数。 小于0的值表示编辑的数量不受限制。 如果需要丢弃编辑以缩小限制,die
按照添加它们的相反顺序对它们调用die
。 默认值为100。- 参数
-
l
- 新限制 - 异常
-
RuntimeException
- 如果此UndoManager
未在进行中(已调用end
) - 另请参见:
-
CompoundEdit.isInProgress()
,end()
,addEdit(javax.swing.undo.UndoableEdit)
,getLimit()
-
editToBeUndone
protected UndoableEdit editToBeUndone()
如果调用undo
则返回要撤消的下一个重要编辑。 如果没有要撤消的编辑,则返回null
。- 结果
- 下一个重要的编辑要撤消
-
editToBeRedone
protected UndoableEdit editToBeRedone()
如果调用redo
则返回要重做的下一个重要编辑。 如果没有要重做的编辑,则返回null
。- 结果
- 下一个重要的编辑要重做
-
undoTo
protected void undoTo(UndoableEdit edit) throws CannotUndoException
撤消从下一个编辑索引到edit
所有更改,相应地更新下一个编辑的索引。- 参数
-
edit
- 要撤消的编辑 - 异常
-
CannotUndoException
- 如果其中一个编辑引发CannotUndoException
-
redoTo
protected void redoTo(UndoableEdit edit) throws CannotRedoException
重做从下一个编辑的索引的所有变化edit
,适当地更新下一个编辑的索引。- 参数
-
edit
- 要重做的编辑 - 异常
-
CannotRedoException
- 如果其中一个编辑引发CannotRedoException
-
undoOrRedo
public void undoOrRedo() throws CannotRedoException, CannotUndoException
调用undo
或redo
之一的便捷方法。 如果任何编辑被撤消(下一个编辑的索引小于编辑列表的长度),则调用redo
,否则调用undo
。- 异常
-
CannotUndoException
- 如果其中一个编辑引发CannotUndoException
-
CannotRedoException
- 如果其中一个编辑引发CannotRedoException
- 另请参见:
-
canUndoOrRedo()
,getUndoOrRedoPresentationName()
-
canUndoOrRedo
public boolean canUndoOrRedo()
如果可以调用undo
或redo
,则返回true。- 结果
-
如果调用
canUndoOrRedo
有效,canUndoOrRedo
true - 另请参见:
-
undoOrRedo()
-
undo
public void undo() throws CannotUndoException
撤消相应的编辑。 如果end
已经援引这一要求贯穿到超,否则该调用undo
上的下一个编辑的索引和最后显著编辑之间的所有编辑,适当地更新下一个编辑的索引。- Specified by:
-
undo
在界面UndoableEdit
- 重写:
-
undo
类CompoundEdit
- 异常
-
CannotUndoException
- 如果其中一个编辑引发CannotUndoException
或者没有要撤消的编辑 - 另请参见:
-
CompoundEdit.end()
,canUndo()
,editToBeUndone()
-
canUndo
public boolean canUndo()
如果可以撤消编辑,则返回true。 如果已调用end
,则返回super的值。 否则,如果要撤消任何编辑,则返回true(editToBeUndone
返回非null
)。- Specified by:
-
canUndo
在界面UndoableEdit
- 重写:
-
canUndo
类CompoundEdit
- 结果
- 如果要撤消编辑,则为true
- 另请参见:
-
CompoundEdit.canUndo()
,editToBeUndone()
-
redo
public void redo() throws CannotRedoException
重做相应的编辑。 如果已调用end
则调用超类。 否则,这将在下一个编辑的索引和下一个重要编辑之间的所有编辑上调用redo
,适当地更新下一个编辑的索引。- Specified by:
-
redo
在界面UndoableEdit
- 重写:
-
redo
在课程CompoundEdit
- 异常
-
CannotRedoException
- 如果其中一个编辑引发CannotRedoException
或者没有要重做的编辑 - 另请参见:
-
CompoundEdit.end()
,canRedo()
,editToBeRedone()
-
canRedo
public boolean canRedo()
如果可以重做编辑,则返回true。 如果已调用end
,则返回super的值。 否则,如果要重做任何编辑,则返回true(editToBeRedone
返回非null
)。- Specified by:
-
canRedo
在界面UndoableEdit
- 重写:
-
canRedo
在类CompoundEdit
- 结果
- 如果要编辑重做,则为true
- 另请参见:
-
CompoundEdit.canRedo()
,editToBeRedone()
-
addEdit
public boolean addEdit(UndoableEdit anEdit)
如果可能的话,将UndoableEdit
添加到此UndoManager
。 这将删除从下一个编辑的索引到编辑列表末尾的所有编辑。 如果已调用end
,则不会添加编辑并返回false
。 如果尚未调用end
则返回true
。- Specified by:
-
addEdit
,界面UndoableEdit
- 重写:
-
addEdit
CompoundEdit
- 参数
-
anEdit
- 要添加的编辑 - 结果
-
如果
anEdit
可以合并到此编辑中,anEdit
true - 另请参见:
-
CompoundEdit.end()
,CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)
-
end
public void end()
将此UndoManager
变为正常CompoundEdit
。 这将删除所有已撤消的编辑。- 重写:
-
end
类CompoundEdit
- 另请参见:
-
CompoundEdit.end()
-
getUndoOrRedoPresentationName
public String getUndoOrRedoPresentationName()
返回getUndoPresentationName
或getRedoPresentationName
便捷方法。 如果下一个编辑的索引等于编辑列表的大小,getUndoPresentationName
返回,否则getRedoPresentationName
返回。- 结果
- 撤消或重做名称
-
getUndoPresentationName
public String getUndoPresentationName()
返回此编辑的可撤消形式的说明。 如果已调用end
则调用super。 否则,如果要撤消编辑,则返回将撤消的下一个重要编辑的值。 如果没有要撤消的编辑并且尚未调用end
则返回UIManager
属性“AbstractUndoableEdit.undoText”中的值。- Specified by:
-
getUndoPresentationName
在界面UndoableEdit
- 重写:
-
getUndoPresentationName
中的CompoundEdit
- 结果
- 此编辑的可撤消形式的说明
- 另请参见:
-
undo()
,CompoundEdit.getUndoPresentationName()
-
getRedoPresentationName
public String getRedoPresentationName()
返回此编辑的可重做形式的说明。 如果已调用end
则调用super。 否则,如果要重做编辑,则返回将重做的下一个重要编辑的值。 如果没有要重做的编辑并且尚未调用end
则返回UIManager
属性“AbstractUndoableEdit.redoText”中的值。- Specified by:
-
getRedoPresentationName
在界面UndoableEdit
- 重写:
-
getRedoPresentationName
类CompoundEdit
- 结果
- 此编辑的可重做形式的说明
- 另请参见:
-
redo()
,CompoundEdit.getRedoPresentationName()
-
undoableEditHappened
public void undoableEditHappened(UndoableEditEvent e)
一种UndoableEditListener
方法。 这将调用addEdit
和e.getEdit()
。- Specified by:
-
undoableEditHappened
在界面UndoableEditListener
- 参数
-
e
- 将添加UndoableEditEvent
UndoableEditEvent
- 另请参见:
-
addEdit(javax.swing.undo.UndoableEdit)
-
toString
public String toString()
返回显示和标识此对象属性的字符串。- 重写:
-
toString
类CompoundEdit
- 结果
- 此对象的String表示形式
-
-