public class UndoManager extends CompoundEdit implements UndoableEditListener
UndoManager manages a list of UndoableEdits,
 providing a way to undo or redo the appropriate edits.  There are
 two ways to add edits to an UndoManager.  Add the edit
 directly using the addEdit method, or add the
 UndoManager to a bean that supports
 UndoableEditListener.  The following examples creates
 an UndoManager and adds it as an
 UndoableEditListener to a JTextField:
 UndoManager undoManager = new UndoManager(); JTextField tf = ...; tf.getDocument().addUndoableEditListener(undoManager);
 UndoManager maintains an ordered list of edits and the
 index of the next edit in that list. The index of the next edit is
 either the size of the current list of edits, or if
 undo has been invoked it corresponds to the index
 of the last significant edit that was undone. When
 undo is invoked all edits from the index of the next
 edit to the last significant edit are undone, in reverse order.
 For example, consider an UndoManager consisting of the
 following edits: A b c D.  Edits with a
 upper-case letter in bold are significant, those in lower-case
 and italicized are insignificant.
 
|   | 
| Figure 1 | 
 As shown in figure 1, if D was just added, the
 index of the next edit will be 4. Invoking undo
 results in invoking undo on D and setting the
 index of the next edit to 3 (edit c), as shown in the following
 figure.
 
|   | 
| Figure 2 | 
 The last significant edit is A, so that invoking
 undo again invokes undo on c,
 b, and A, in that order, setting the index of the
 next edit to 0, as shown in the following figure.
 
|   | 
| Figure 3 | 
 Invoking redo results in invoking redo on
 all edits between the index of the next edit and the next
 significant edit (or the end of the list).  Continuing with the previous
 example if redo were invoked, redo would in
 turn be invoked on A, b and c.  In addition
 the index of the next edit is set to 3 (as shown in figure 2).
 
 Adding an edit to an UndoManager results in
 removing all edits from the index of the next edit to the end of
 the list.  Continuing with the previous example, if a new edit,
 e, is added the edit D is removed from the list
 (after having die invoked on it).  If c is not
 incorporated by the next edit
 (c.addEdit(e) returns true), or replaced
 by it (e.replaceEdit(c) returns true),
 the new edit is added after c, as shown in the following
 figure.
 
|   | 
| Figure 4 | 
 Once end has been invoked on an UndoManager
 the superclass behavior is used for all UndoableEdit
 methods.  Refer to CompoundEdit for more details on its
 behavior.
 
Unlike the rest of Swing, this class is thread safe.
 Warning:
 Serialized objects of this class will not be compatible with
 future Swing releases. The current serialization support is
 appropriate for short term storage or RMI between applications running
 the same version of Swing.  As of 1.4, support for long term storage
 of all JavaBeans™
 has been added to the java.beans package.
 Please see XMLEncoder.
editsRedoName, UndoName| Constructor and Description | 
|---|
| UndoManager()Creates a new  UndoManager. | 
| Modifier and Type | Method and Description | 
|---|---|
| boolean | addEdit(UndoableEdit anEdit)Adds an  UndoableEditto thisUndoManager, if it's possible. | 
| boolean | canRedo()Returns true if edits may be redone. | 
| boolean | canUndo()Returns true if edits may be undone. | 
| boolean | canUndoOrRedo()Returns true if it is possible to invoke  undoorredo. | 
| void | discardAllEdits()Empties the undo manager sending each edit a  diemessage
 in the process. | 
| protected UndoableEdit | editToBeRedone()Returns the the next significant edit to be redone if  redois invoked. | 
| protected UndoableEdit | editToBeUndone()Returns the the next significant edit to be undone if  undois invoked. | 
| void | end()Turns this  UndoManagerinto a normalCompoundEdit. | 
| int | getLimit()Returns the maximum number of edits this  UndoManagerholds. | 
| String | getRedoPresentationName()Returns a description of the redoable form of this edit. | 
| String | getUndoOrRedoPresentationName()Convenience method that returns either
  getUndoPresentationNameorgetRedoPresentationName. | 
| String | getUndoPresentationName()Returns a description of the undoable form of this edit. | 
| void | redo()Redoes the appropriate edits. | 
| protected void | redoTo(UndoableEdit edit)Redoes all changes from the index of the next edit to
  edit, updating the index of the next edit appropriately. | 
| void | setLimit(int l)Sets the maximum number of edits this  UndoManagerholds. | 
| String | toString()Returns a string that displays and identifies this
 object's properties. | 
| protected void | trimEdits(int from,
         int to)Removes edits in the specified range. | 
| protected void | trimForLimit()Reduces the number of queued edits to a range of size limit,
 centered on the index of the next edit. | 
| void | undo()Undoes the appropriate edits. | 
| void | undoableEditHappened(UndoableEditEvent e)An  UndoableEditListenermethod. | 
| void | undoOrRedo()Convenience method that invokes one of  undoorredo. | 
| protected void | undoTo(UndoableEdit edit)Undoes all changes from the index of the next edit to
  edit, updating the index of the next edit appropriately. | 
die, getPresentationName, isInProgress, isSignificant, lastEditreplaceEditpublic int getLimit()
UndoManager
 holds. A value less than 0 indicates the number of edits is not
 limited.UndoManager holdsaddEdit(javax.swing.undo.UndoableEdit), 
setLimit(int)public void discardAllEdits()
die message
 in the process.AbstractUndoableEdit.die()protected void trimForLimit()
protected void trimEdits(int from,
                         int to)
die invoked on them and are removed from
 the list of edits. This has no effect if
 from > to.from - the minimum index to removeto - the maximum index to removepublic void setLimit(int l)
UndoManager
 holds. A value less than 0 indicates the number of edits is not
 limited. If edits need to be discarded to shrink the limit,
 die will be invoked on them in the reverse
 order they were added.  The default is 100.l - the new limitRuntimeException - if this UndoManager is not in progress
                          (end has been invoked)CompoundEdit.isInProgress(), 
end(), 
addEdit(javax.swing.undo.UndoableEdit), 
getLimit()protected UndoableEdit editToBeUndone()
undo
 is invoked. This returns null if there are no edits
 to be undone.protected UndoableEdit editToBeRedone()
redo
 is invoked. This returns null if there are no edits
 to be redone.protected void undoTo(UndoableEdit edit) throws CannotUndoException
edit, updating the index of the next edit appropriately.CannotUndoException - if one of the edits throws
         CannotUndoExceptionprotected void redoTo(UndoableEdit edit) throws CannotRedoException
edit, updating the index of the next edit appropriately.CannotRedoException - if one of the edits throws
         CannotRedoExceptionpublic void undoOrRedo()
                throws CannotRedoException,
                       CannotUndoException
undo or
 redo. If any edits have been undone (the index of
 the next edit is less than the length of the edits list) this
 invokes redo, otherwise it invokes undo.CannotUndoException - if one of the edits throws
         CannotUndoExceptionCannotRedoException - if one of the edits throws
         CannotRedoExceptioncanUndoOrRedo(), 
getUndoOrRedoPresentationName()public boolean canUndoOrRedo()
undo or
 redo.canUndoOrRedo is validundoOrRedo()public void undo()
          throws CannotUndoException
end has been
 invoked this calls through to the superclass, otherwise
 this invokes undo on all edits between the
 index of the next edit and the last significant edit, updating
 the index of the next edit appropriately.undo in interface UndoableEditundo in class CompoundEditCannotUndoException - if one of the edits throws
         CannotUndoException or there are no edits
         to be undoneCompoundEdit.end(), 
canUndo(), 
editToBeUndone()public boolean canUndo()
end has
 been invoked, this returns the value from super.  Otherwise
 this returns true if there are any edits to be undone
 (editToBeUndone returns non-null).canUndo in interface UndoableEditcanUndo in class CompoundEditCompoundEdit.canUndo(), 
editToBeUndone()public void redo()
          throws CannotRedoException
end has been
 invoked this calls through to the superclass.  Otherwise
 this invokes redo on all edits between the
 index of the next edit and the next significant edit, updating
 the index of the next edit appropriately.redo in interface UndoableEditredo in class CompoundEditCannotRedoException - if one of the edits throws
         CannotRedoException or there are no edits
         to be redoneCompoundEdit.end(), 
canRedo(), 
editToBeRedone()public boolean canRedo()
end has
 been invoked, this returns the value from super.  Otherwise,
 this returns true if there are any edits to be redone
 (editToBeRedone returns non-null).canRedo in interface UndoableEditcanRedo in class CompoundEditCompoundEdit.canRedo(), 
editToBeRedone()public boolean addEdit(UndoableEdit anEdit)
UndoableEdit to this
 UndoManager, if it's possible.  This removes all
 edits from the index of the next edit to the end of the edits
 list.  If end has been invoked the edit is not added
 and false is returned.  If end hasn't
 been invoked this returns true.addEdit in interface UndoableEditaddEdit in class CompoundEditanEdit - the edit to be addedanEdit can be incorporated into this
              editCompoundEdit.end(), 
CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)public void end()
UndoManager into a normal
 CompoundEdit.  This removes all edits that have
 been undone.end in class CompoundEditCompoundEdit.end()public String getUndoOrRedoPresentationName()
getUndoPresentationName or
 getRedoPresentationName.  If the index of the next
 edit equals the size of the edits list,
 getUndoPresentationName is returned, otherwise
 getRedoPresentationName is returned.public String getUndoPresentationName()
end has been invoked this calls into super.
 Otherwise if there are edits to be undone, this returns
 the value from the next significant edit that will be undone.
 If there are no edits to be undone and end has not
 been invoked this returns the value from the UIManager
 property "AbstractUndoableEdit.undoText".getUndoPresentationName in interface UndoableEditgetUndoPresentationName in class CompoundEditundo(), 
CompoundEdit.getUndoPresentationName()public String getRedoPresentationName()
end has been invoked this calls into super.
 Otherwise if there are edits to be redone, this returns
 the value from the next significant edit that will be redone.
 If there are no edits to be redone and end has not
 been invoked this returns the value from the UIManager
 property "AbstractUndoableEdit.redoText".getRedoPresentationName in interface UndoableEditgetRedoPresentationName in class CompoundEditredo(), 
CompoundEdit.getRedoPresentationName()public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener method. This invokes
 addEdit with e.getEdit().undoableEditHappened in interface UndoableEditListenere - the UndoableEditEvent the
        UndoableEditEvent will be added fromaddEdit(javax.swing.undo.UndoableEdit)public String toString()
toString in class 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, 2017, Oracle and/or its affiliates.  All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.