This documentation differs from the official API. Jadeite adds extra features to the API including: variable font sizes, constructions examples, placeholders for classes and methods, and auto-generated “See Also” links. Additionally it is missing some items found in standard Javadoc documentation, including: generics type information, “Deprecated” tags and comments, “See Also” links, along with other minor differences. Please send any questions or feedback to bam@cs.cmu.edu.


javax.swing.undo
class UndoManager

java.lang.Object extended by javax.swing.undo.AbstractUndoableEdit extended by javax.swing.undo.CompoundEdit extended by javax.swing.undo.UndoManager
All Implemented Interfaces:
Serializable, UndoableEditListener, UndoableEdit

Most common way to construct:

UndoManager undoManager = new UndoManager();

Based on 90 examples


public class UndoManager
extends CompoundEdit
implements UndoableEditListener

{@code UndoManager} manages a list of {@code 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 JavaBeansTM has been added to the java.beans package. Please see {@link java.beans.XMLEncoder}.


Field Summary
 
Fields inherited from class javax.swing.undo.CompoundEdit
edits
 
Fields inherited from class javax.swing.undo.AbstractUndoableEdit
RedoName, UndoName
 
Constructor Summary

          Creates a new UndoManager.
 
Method Summary
 boolean

          Adds an UndoableEdit to this UndoManager, if it's possible.
 boolean

          Returns true if edits may be redone.
 boolean

          Returns true if edits may be undone.
 boolean

          Returns true if it is possible to invoke undo or redo.
 void

          Empties the undo manager sending each edit a die message in the process.
protected UndoableEdit

          Returns the the next significant edit to be redone if redo is invoked.
protected UndoableEdit

          Returns the the next significant edit to be undone if undo is invoked.
 void
end()

          Turns this UndoManager into a normal CompoundEdit.
 int

          Returns the maximum number of edits this holds.
 String

          Returns a description of the redoable form of this edit.
 String

          Convenience method that returns either getUndoPresentationName or getRedoPresentationName.
 String

          Returns a description of the undoable form of this edit.
 void

          Redoes the appropriate edits.
protected void

          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 UndoManager holds.
 String

          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

          Reduces the number of queued edits to a range of size limit, centered on the index of the next edit.
 void

          Undoes the appropriate edits.
 void

          An UndoableEditListener method.
 void

          Convenience method that invokes one of undo or redo.
protected void

          Undoes all changes from the index of the next edit to edit, updating the index of the next edit appropriately.
 
Methods inherited from class javax.swing.undo.CompoundEdit
addEdit, canRedo, canUndo, die, end, getPresentationName, getRedoPresentationName, getUndoPresentationName, isInProgress, isSignificant, lastEdit, redo, toString, undo
 
Methods inherited from class javax.swing.undo.AbstractUndoableEdit
addEdit, canRedo, canUndo, die, getPresentationName, getRedoPresentationName, getUndoPresentationName, isSignificant, redo, replaceEdit, toString, undo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

UndoManager

public UndoManager()
Creates a new UndoManager.

Method Detail

addEdit

public synchronized boolean addEdit(UndoableEdit anEdit)
Adds an 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.

Overrides:
addEdit in class CompoundEdit
Parameters:
anEdit - the edit to be added
Returns:
true if anEdit can be incorporated into this edit

canRedo

public synchronized boolean canRedo()
Returns true if edits may be redone. If 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).

Overrides:
canRedo in class CompoundEdit
Returns:
true if there are edits to be redone

canUndo

public synchronized boolean canUndo()
Returns true if edits may be undone. If 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).

Overrides:
canUndo in class CompoundEdit
Returns:
true if there are edits to be undone

canUndoOrRedo

public synchronized boolean canUndoOrRedo()
Returns true if it is possible to invoke undo or redo.

Returns:
true if invoking canUndoOrRedo is valid

discardAllEdits

public synchronized void discardAllEdits()
Empties the undo manager sending each edit a die message in the process.


editToBeRedone

protected UndoableEdit editToBeRedone()
Returns the the next significant edit to be redone if redo is invoked. This returns null if there are no edits to be redone.

Returns:
the next significant edit to be redone

editToBeUndone

protected UndoableEdit editToBeUndone()
Returns the the next significant edit to be undone if undo is invoked. This returns null if there are no edits to be undone.

Returns:
the next significant edit to be undone

end

public synchronized void end()
Turns this UndoManager into a normal CompoundEdit. This removes all edits that have been undone.

Overrides:
end in class CompoundEdit

getLimit

public synchronized int getLimit()
Returns the maximum number of edits this {@code UndoManager} holds. A value less than 0 indicates the number of edits is not limited.

Returns:
the maximum number of edits this {@code UndoManager} holds

getRedoPresentationName

public synchronized String getRedoPresentationName()
Returns a description of the redoable form of this edit. If 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".

Overrides:
getRedoPresentationName in class CompoundEdit
Returns:
a description of the redoable form of this edit

getUndoOrRedoPresentationName

public synchronized String getUndoOrRedoPresentationName()
Convenience method that returns either getUndoPresentationName or getRedoPresentationName. If the index of the next edit equals the size of the edits list, getUndoPresentationName is returned, otherwise getRedoPresentationName is returned.

Returns:
undo or redo name

getUndoPresentationName

public synchronized String getUndoPresentationName()
Returns a description of the undoable form of this edit. If 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".

Overrides:
getUndoPresentationName in class CompoundEdit
Returns:
a description of the undoable form of this edit

redo

public synchronized void redo()
                       throws CannotRedoException
Redoes the appropriate edits. If 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.

Overrides:
redo in class CompoundEdit
Throws:
CannotRedoException - if one of the edits throws CannotRedoException or there are no edits to be redone

redoTo

protected void redoTo(UndoableEdit edit)
               throws CannotRedoException
Redoes all changes from the index of the next edit to edit, updating the index of the next edit appropriately.

Parameters:
edit
Throws:
CannotRedoException - if one of the edits throws CannotRedoException

setLimit

public synchronized void setLimit(int l)
Sets the maximum number of edits this 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.

Parameters:
l - the new limit

toString

public String toString()
Returns a string that displays and identifies this object's properties.

Overrides:
toString in class CompoundEdit
Returns:
a String representation of this object

trimEdits

protected void trimEdits(int from,
                         int to)
Removes edits in the specified range. All edits in the given range (inclusive, and in reverse order) will have die invoked on them and are removed from the list of edits. This has no effect if from > to.

Parameters:
from - the minimum index to remove
to - the maximum index to remove

trimForLimit

protected void trimForLimit()
Reduces the number of queued edits to a range of size limit, centered on the index of the next edit.


undo

public synchronized void undo()
                       throws CannotUndoException
Undoes the appropriate edits. If 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.

Overrides:
undo in class CompoundEdit
Throws:
CannotUndoException - if one of the edits throws CannotUndoException or there are no edits to be undone

undoableEditHappened

public void undoableEditHappened(UndoableEditEvent e)
An UndoableEditListener method. This invokes addEdit with e.getEdit().

Parameters:
e - the UndoableEditEvent the UndoableEditEvent will be added from

undoOrRedo

public synchronized void undoOrRedo()
                             throws CannotRedoException,
                                    CannotUndoException
Convenience method that invokes one of 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.

Throws:
CannotRedoException - if one of the edits throws CannotRedoException
CannotUndoException - if one of the edits throws CannotUndoException

undoTo

protected void undoTo(UndoableEdit edit)
               throws CannotUndoException
Undoes all changes from the index of the next edit to edit, updating the index of the next edit appropriately.

Parameters:
edit
Throws:
CannotUndoException - if one of the edits throws CannotUndoException


This documentation differs from the official API. Jadeite adds extra features to the API including: variable font sizes, constructions examples, placeholders for classes and methods, and auto-generated “See Also” links. Additionally it is missing some items found in standard Javadoc documentation, including: generics type information, “Deprecated” tags and comments, “See Also” links, along with other minor differences. Please send any questions or feedback to bam@cs.cmu.edu.
This page displays the Jadeite version of the documention, which is derived from the offical documentation that contains this copyright notice:
Copyright 2008 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.
The official Sun™ documentation can be found here at http://java.sun.com/javase/6/docs/api/.