- 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);
Figure 1UndoManager维护一个有序的编辑列表和该列表中下一个编辑的索引。 下一个编辑的索引是当前编辑列表的大小,或者如果已调用undo则它对应于撤消的最后一个重要编辑的索引。 调用undo,将以相反的顺序撤消从下一次编辑的索引到最后一次重要编辑的所有编辑。 例如,考虑UndoManager其中包含以下编辑内容: A b D。 带粗体的大写字母的编辑很重要,小写和斜体的编辑是微不足道的。
Figure 1
如figure 1所示,如果刚刚添加D ,则下一次编辑的索引将为4.调用
Figure 2undo导致在D上调用undo并将下一次编辑的索引设置为3(编辑c ),如下图所示。
Figure 2
最后一次重要编辑是A ,因此调用
Figure 3undo再次undoundo调用c , 和A上的undo,将下一个编辑的索引设置为0,如下图所示。
Figure 3
调用
redo导致在下一个编辑的索引和下一个重要编辑(或列表末尾)之间的所有编辑上调用redo。 与前面的例子,如果继续redo被调用,redo将依次在A,B和C调用。 此外,下一个编辑的索引设置为3(如figure 2中所示)。将编辑添加到
Figure 4UndoManager导致从下一个编辑的索引中删除所有编辑到列表末尾。 继续前面的示例,如果添加了新的编辑 ,则从列表中删除编辑D (在调用die之后)。 如果c未被下一次编辑合并(c.addEdit(e)返回true),或被其替换(e.replaceEdit(c)返回true),则在c后添加新编辑,如下图所示。
Figure 4
在
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。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 booleanaddEdit(UndoableEdit anEdit)如果可能的话,将UndoableEdit添加到此UndoManager。booleancanRedo()如果可以重做编辑,则返回true。booleancanUndo()如果可以撤消编辑,则返回true。booleancanUndoOrRedo()如果可以调用undo或redo,则返回true。voiddiscardAllEdits()清空撤消管理器在此过程中发送每个编辑die消息。protected UndoableEditeditToBeRedone()如果调用redo则返回要重做的下一个重要编辑。protected UndoableEditeditToBeUndone()如果调用undo则返回要撤消的下一个重要编辑。voidend()将此UndoManager变为正常CompoundEdit。intgetLimit()返回此UndoManager保存的最大编辑数。StringgetRedoPresentationName()返回此编辑的可重做形式的说明。StringgetUndoOrRedoPresentationName()返回getUndoPresentationName或getRedoPresentationName便捷方法。StringgetUndoPresentationName()返回此编辑的可撤消形式的说明。voidredo()重做相应的编辑。protected voidredoTo(UndoableEdit edit)重做从下一个编辑的索引的所有变化edit,适当地更新下一个编辑的索引。voidsetLimit(int l)设置此UndoManager包含的最大编辑数。StringtoString()返回显示和标识此对象属性的字符串。protected voidtrimEdits(int from, int to)删除指定范围内的编辑。protected voidtrimForLimit()将排队编辑的数量减少到一个大小限制范围,以下一个编辑的索引为中心。voidundo()撤消相应的编辑。voidundoableEditHappened(UndoableEditEvent e)一种UndoableEditListener方法。voidundoOrRedo()调用undo或redo之一的便捷方法。protected voidundoTo(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有效,canUndoOrRedotrue - 另请参见:
-
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 - 重写:
-
addEditCompoundEdit - 参数
-
anEdit- 要添加的编辑 - 结果
-
如果
anEdit可以合并到此编辑中,anEdittrue - 另请参见:
-
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- 将添加UndoableEditEventUndoableEditEvent - 另请参见:
-
addEdit(javax.swing.undo.UndoableEdit)
-
toString
public String toString()
返回显示和标识此对象属性的字符串。- 重写:
-
toString类CompoundEdit - 结果
- 此对象的String表示形式
-
-