|
Java™ Platform Standard Ed. 6 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectjavax.swing.undo.AbstractUndoableEdit
javax.swing.undo.CompoundEdit
javax.swing.undo.UndoManager
public class UndoManager
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 JavaBeansTM
has been added to the java.beans package.
Please see XMLEncoder.
| Field Summary |
|---|
| Fields inherited from class javax.swing.undo.CompoundEdit |
|---|
edits |
| Fields inherited from class javax.swing.undo.AbstractUndoableEdit |
|---|
RedoName, UndoName |
| Constructor Summary | |
|---|---|
UndoManager()
Creates a new UndoManager. |
|
| Method Summary | |
|---|---|
boolean |
addEdit(UndoableEdit anEdit)
Adds an UndoableEdit to this
UndoManager, 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 undo or
redo. |
void |
discardAllEdits()
Empties the undo manager sending each edit a die message
in the process. |
protected UndoableEdit |
editToBeRedone()
Returns the the next significant edit to be redone if redo
is invoked. |
protected UndoableEdit |
editToBeUndone()
Returns the the next significant edit to be undone if undo
is invoked. |
void |
end()
Turns this UndoManager into a normal
CompoundEdit. |
int |
getLimit()
Returns the maximum number of edits this UndoManager
holds. |
String |
getRedoPresentationName()
Returns a description of the redoable form of this edit. |
String |
getUndoOrRedoPresentationName()
Convenience method that returns either getUndoPresentationName or
getRedoPresentationName. |
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 UndoManager
holds. |
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 UndoableEditListener method. |
void |
undoOrRedo()
Convenience method that invokes one of undo or
redo. |
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. |
| Methods inherited from class javax.swing.undo.CompoundEdit |
|---|
die, getPresentationName, isInProgress, isSignificant, lastEdit |
| Methods inherited from class javax.swing.undo.AbstractUndoableEdit |
|---|
replaceEdit |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Constructor Detail |
|---|
public UndoManager()
UndoManager.
| Method Detail |
|---|
public 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 limit
RuntimeException - 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
CannotUndoException
protected void redoTo(UndoableEdit edit)
throws CannotRedoException
edit, updating the index of the next edit appropriately.
CannotRedoException - if one of the edits throws
CannotRedoException
public 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
CannotUndoException
CannotRedoException - 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 added
anEdit 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
|
Java™ Platform Standard Ed. 6 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
Copyright 2008 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.