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
编辑组成的UndoManager: A b D。 粗体大写字母的编辑是重要的,小写和斜体的编辑是微不足道的。
如figure 1所示,如果刚刚添加了D ,则下一次编辑的索引将为4.调用undo
导致在D上调用undo
,并将下一个编辑的索引设置为3(编辑c ),如下图所示。
最后一个重要的编辑是A ,所以调用undo
再次调用c , 和A上的undo
,将下一个编辑的索引设置为0,如下图所示。
调用redo
导致对下一个编辑的索引和下一个重要编辑(或列表的结尾)之间的所有编辑调用redo
。 继续前面的例子,如果redo
被调用, redo
将依次在A , b和c上被调用。 另外下一个编辑的索引设置为3(如figure 2所示)。
将编辑添加到UndoManager
会导致将下一次编辑的索引中的所有编辑从列表的末尾删除。 继续前面的例子,如果添加了一个新的编辑 ,则编辑D从列表中删除(在其die
调用die
之后)。 如果下一个编辑没有并入c ( c.addEdit(e)
返回true),或者替换为( e.replaceEdit(c)
返回true),则在c之后添加新的编辑,如下图所示。
一旦end
被调用了一个UndoManager
超级行为被用于所有UndoableEdit
方法。 有关其行为的更多细节,请参阅CompoundEdit
。
与其他Swing不同,这个类是线程安全的。
警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4开始,对所有JavaBeans的长期存储的支持已经添加到java.beans
包中。 请参阅XMLEncoder
。
edits
RedoName, UndoName
Constructor and Description |
---|
UndoManager()
创建一个新的
UndoManager 。
|
Modifier and Type | Method and Description |
---|---|
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 保留的最大编辑
UndoManager 。
|
String |
getRedoPresentationName()
返回此修改的可重写形式的描述。
|
String |
getUndoOrRedoPresentationName()
方便方法返回
getUndoPresentationName 或
getRedoPresentationName 。
|
String |
getUndoPresentationName()
返回此修改的可撤销形式的描述。
|
void |
redo()
重新进行适当的编辑。
|
protected void |
redoTo(UndoableEdit edit)
将下一次编辑索引的所有更改重新设置为
edit ,
edit 更新下一次编辑的索引。
|
void |
setLimit(int l)
设置
UndoManager 所持
UndoManager 最大编辑
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 ,更新下一次编辑的索引。
|
die, getPresentationName, isInProgress, isSignificant, lastEdit
replaceEdit
public int getLimit()
UndoManager
所持UndoManager
最大编辑UndoManager
。
小于0的值表示编辑次数不受限制。
UndoManager
拥有的最大编辑
UndoManager
addEdit(javax.swing.undo.UndoableEdit)
,
setLimit(int)
public void discardAllEdits()
die
管理器中清空发送每个编辑
die
消息的过程。
protected void trimForLimit()
protected void trimEdits(int from, int to)
die
并从编辑列表中删除。
如果from
> to
。
from
- 要移除的最小索引
to
- 要删除的最大索引
public void setLimit(int l)
UndoManager
保留的最大编辑数。
小于0的值表示编辑次数不受限制。
如果编辑需要丢弃以缩小限制, die
将按照它们添加的相反顺序被调用。
默认值为100。
l
- 新的限制
RuntimeException
- 如果这个
UndoManager
未在进行中(
end
已被调用)
CompoundEdit.isInProgress()
,
end()
,
addEdit(javax.swing.undo.UndoableEdit)
,
getLimit()
protected UndoableEdit editToBeUndone()
undo
被调用。
如果没有编辑被撤销,则返回null
。
protected UndoableEdit editToBeRedone()
redo
,则返回下一个要重做的重要编辑。
如果没有编辑重做,则返回null
。
protected void undoTo(UndoableEdit edit) throws CannotUndoException
edit
,更新下一次编辑的索引。
CannotUndoException
- 如果其中一个编辑投掷
CannotUndoException
protected void redoTo(UndoableEdit edit) throws CannotRedoException
edit
,
edit
更新下一个编辑的索引。
CannotRedoException
- 如果其中一个编辑投掷
CannotRedoException
public void undoOrRedo() throws CannotRedoException, CannotUndoException
undo
或redo
之一的方便方法。
如果任何编辑已被撤销(下一个编辑的索引小于编辑列表的长度),则调用redo
,否则调用undo
。
CannotUndoException
- 如果其中一个编辑投掷
CannotUndoException
CannotRedoException
- 如果其中一个编辑投掷
CannotRedoException
canUndoOrRedo()
,
getUndoOrRedoPresentationName()
public boolean canUndoOrRedo()
undo
或
redo
则返回true。
canUndoOrRedo
有效,则为true
undoOrRedo()
public void undo() throws CannotUndoException
end
已援引这一要求贯穿到超,否则该调用undo
上的下一个编辑的索引和最后显著编辑之间的所有编辑,适当地更新下一个编辑的索引。
undo
在接口
UndoableEdit
undo
在
CompoundEdit
CannotUndoException
- 如果其中一个编辑投掷
CannotUndoException
或没有编辑被撤销
CompoundEdit.end()
,
canUndo()
,
editToBeUndone()
public boolean canUndo()
end
,则返回超值的值。
否则,如果有任何编辑被撤销,则返回true( editToBeUndone
返回非null
)。
canUndo
在接口
UndoableEdit
canUndo
在
CompoundEdit
CompoundEdit.canUndo()
,
editToBeUndone()
public void redo() throws CannotRedoException
end
,则调用该超类。
否则,将对下一个编辑的索引和下一个重要编辑之间的所有编辑调用redo
,适当地更新下一个编辑的索引。
redo
在界面
UndoableEdit
redo
在类
CompoundEdit
CannotRedoException
- 如果其中一个编辑投掷
CannotRedoException
或没有编辑重做
CompoundEdit.end()
,
canRedo()
,
editToBeRedone()
public boolean canRedo()
end
,则返回超值的值。
否则,如果有任何编辑要重做,则返回true( editToBeRedone
返回非null
)。
canRedo
在接口
UndoableEdit
canRedo
在
CompoundEdit
CompoundEdit.canRedo()
,
editToBeRedone()
public boolean addEdit(UndoableEdit anEdit)
UndoableEdit
到这个UndoManager
,如果可能的话。
这会将下一次编辑的索引中的所有编辑从编辑列表的末尾删除。
如果调用了end
,则不会添加编辑,并返回false
。
如果end
尚未被调用,则返回true
。
addEdit
在界面
UndoableEdit
addEdit
在
CompoundEdit
anEdit
- 要添加的编辑
anEdit
可以并入此编辑,则为true
CompoundEdit.end()
,
CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)
public void end()
UndoManager
变成一个正常的CompoundEdit
。
这将删除所有已被撤销的编辑。
end
在
CompoundEdit
CompoundEdit.end()
public String getUndoOrRedoPresentationName()
getUndoPresentationName
或getRedoPresentationName
。
如果下一个编辑的索引等于编辑列表的大小, getUndoPresentationName
返回,否则getRedoPresentationName
返回。
public String getUndoPresentationName()
end
被调用,这个调用进入超级。
否则,如果编辑被撤销,则返回下一个将被撤消的重要编辑的值。
如果没有编辑被end
并且没有调用end
,则返回UIManager
属性“AbstractUndoableEdit.undoText”的值。
getUndoPresentationName
在接口
UndoableEdit
getUndoPresentationName
在
CompoundEdit
undo()
,
CompoundEdit.getUndoPresentationName()
public String getRedoPresentationName()
end
被调用,这个调用进入超级。
否则,如果编辑被重做,则返回重新编辑的下一个重要编辑的值。
如果没有重做编辑,并且未调用end
,则返回UIManager
属性“AbstractUndoableEdit.redoText”的值。
getRedoPresentationName
在接口
UndoableEdit
getRedoPresentationName
在
CompoundEdit
redo()
,
CompoundEdit.getRedoPresentationName()
public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener
方法。
这将调用addEdit
与e.getEdit()
。
undoableEditHappened
在接口
UndoableEditListener
e
-
UndoableEditEvent
的
UndoableEditEvent
将从
addEdit(javax.swing.undo.UndoableEdit)
public String toString()
toString
在
CompoundEdit