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
    Figure 1    
        如figure 1所示,如果刚刚添加了D ,则下一次编辑的索引将为4.调用undo导致在D上调用undo ,并将下一个编辑的索引设置为3(编辑c ),如下图所示。 
 Figure 2
    Figure 2    
        最后一个重要的编辑是A ,所以调用undo再次调用c , 和A上的undo ,将下一个编辑的索引设置为0,如下图所示。 
 Figure 3
    Figure 3    
        调用redo导致对下一个编辑的索引和下一个重要编辑(或列表的结尾)之间的所有编辑调用redo 。 继续前面的例子,如果redo被调用, redo将依次在A , b和c上被调用。 另外下一个编辑的索引设置为3(如figure 2所示)。 
 将编辑添加到UndoManager会导致将下一次编辑的索引中的所有编辑从列表的末尾删除。 继续前面的例子,如果添加了一个新的编辑 ,则编辑D从列表中删除(在其die调用die之后)。 如果下一个编辑没有并入c ( c.addEdit(e)返回true),或者替换为( e.replaceEdit(c)返回true),则在c之后添加新的编辑,如下图所示。 
 Figure 4
    Figure 4    
        一旦end被调用了一个UndoManager超级行为被用于所有UndoableEdit方法。 有关其行为的更多细节,请参阅CompoundEdit 。 
与其他Swing不同,这个类是线程安全的。
 警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4开始,对所有JavaBeans的长期存储的支持已经添加到java.beans包中。 请参阅XMLEncoder 。 
editsRedoName, 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, lastEditreplaceEditpublic 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 
            Submit a bug or feature 
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
 Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.