javax.swing.undo
public class UndoManager extends CompoundEdit implements UndoableEditListener
Tyipcally, an application will create only one single instance
of UndoManager. When the user performs an undoable action, for
instance changing the color of an object from green to blue, the
application registers an {@link UndoableEdit} object with the
UndoManager
. To implement the “undo” and
“redo” menu commands, the application invokes the
UndoManager’s {@link #undo} and {@link #redo} methods. The
human-readable text of these menu commands is provided by {@link
#getUndoPresentationName} and {@link #getRedoPresentationName},
respectively. To determine whether the menu item should be
selectable or greyed out, use {@link #canUndo} and {@link
#canRedo}.
The UndoManager will only keep a specified number of editing actions, the limit. The value of this parameter can be retrieved by calling {@link #getLimit} and set with {@link #setLimit}. If more UndoableEdits are added to the UndoManager, the oldest actions will be discarded.
Some applications do not provide separate menu commands for
“undo” and “redo.” Instead, they
have just a single command whose text switches between the two.
Such applications would use an UndoManager with a limit
of 1. The text of this combined menu item is available via
{@link #getUndoOrRedoPresentationName}, and it is implemented
by calling {@link #undoOrRedo}.
Thread Safety: In constrast to the other classes of the
javax.swing.undo
package, the public methods of an
UndoManager
are safe to call from concurrent threads.
The caller does not need to perform external synchronization, and
{@link javax.swing.event.UndoableEditEvent} sources do not need to
broadcast their events from inside the Swing worker thread.
Constructor Summary | |
---|---|
UndoManager()
Constructs an UndoManager.
|
Method Summary | |
---|---|
boolean | addEdit(UndoableEdit edit)
Registers an undoable editing action with this UndoManager. |
boolean | canRedo()
Determines whether it would be possible to redo this editing
action.
|
boolean | canUndo()
Determines whether it would be possible to undo this editing
action.
|
boolean | canUndoOrRedo()
Determines whether it would be possible to either undo or redo
this editing action.
|
void | discardAllEdits()
Discards all editing actions that are currently registered with
this UndoManager. |
protected UndoableEdit | editToBeRedone()
Determines which significant edit would be redone if {@link
#redo()} was called.
|
protected UndoableEdit | editToBeUndone()
Determines which significant edit would be undone if {@link
#undo()} was called.
|
void | end()
Puts this UndoManager into a state where it acts as a normal
{@link CompoundEdit}. |
int | getLimit()
Returns how many edits this UndoManager can maximally hold.
|
String | getRedoPresentationName()
Calculates a localized text for presenting the redo action
to the user, for example in the form of a menu command. |
String | getUndoOrRedoPresentationName()
Calculates a localized text for presenting the undo or redo
action to the user, for example in the form of a menu command.
|
String | getUndoPresentationName()
Calculates a localized text for presenting the undo action
to the user, for example in the form of a menu command. |
void | redo()
Redoes one significant edit action. |
protected void | redoTo(UndoableEdit edit)
Redoes all editing actions in the same order as they were
added to this UndoManager, up to the specified action.
|
void | setLimit(int limit)
Changes the maximal number of edits that this UndoManager can
process. |
String | toString()
Returns a string representation for this UndoManager. |
protected void | trimEdits(int from, int to)
Discards a range of edits. |
protected void | trimForLimit()
Called by various internal methods in order to enforce
the limit value. |
void | undo()
Undoes one significant edit action. |
void | undoableEditHappened(UndoableEditEvent event)
Registers the edit action of an {@link UndoableEditEvent}
with this UndoManager.
|
void | undoOrRedo()
Undoes or redoes the last action. |
protected void | undoTo(UndoableEdit edit)
Undoes all editing actions in reverse order of addition,
up to the specified action,
|
The limit
of the freshly constructed UndoManager
is 100.
limit
is reached, the oldest action
will be discarded (and receives a {@linkplain UndoableEdit#die()
die message}. Equally, any actions that were undone (but not re-done)
will be discarded, too.
Parameters: edit the editing action that is added to this UndoManager.
Returns: true
if edit
could be
incorporated; false
if edit
has not
been incorporated because {@link #end()} has already been called
on this UndoManager
.
Returns: true
to indicate that this action can be
redone; false
otherwise.
See Also: redo canUndo canUndoOrRedo
Returns: true
to indicate that this action can be
undone; false
otherwise.
See Also: undo canRedo canUndoOrRedo
This is useful for applications that do not present a separate
undo and redo facility, but just have a single menu item for
undoing and redoing the very last action. Such applications will
use an UndoManager
whose limit
is 1.
Returns: true
to indicate that this action can be
undone or redone; false
if neither is possible at
the current time.
Returns: the significant edit that would be redone, or
null
if no significant edit would be affected by
calling {@link #redo()}.
Returns: the significant edit that would be undone, or
null
if no significant edit would be affected by
calling {@link #undo()}.
See Also: UndoManager
This is useful for applications that do not present a separate
undo and redo facility, but just have a single menu item for
undoing and redoing the very last action. Such applications will
use an UndoManager
whose limit
is 1.
Returns: the redo presentation name if the last action has already been undone, or the undo presentation name otherwise.
However, if {@link #end()} has been called on this
UndoManager, it will behave like a normal {@link
CompoundEdit}. In this case, all actions will be redone
in order of addition. Typical applications will never call {@link
#end()} on their UndoManager
.
Throws: CannotRedoException if no action can be redone.
See Also: canRedo redo undoOrRedo
Parameters: edit the last editing action to be redone.
Parameters: limit the new limit.
Throws: IllegalStateException if {@link #end()} has already been called on this UndoManager.
[from
.. to]
will receive a {@linkplain UndoableEdit#die() die
message} before being removed from the edits array. If
from
is greater than to
, nothing
happens.
Parameters: from the lower bound of the range of edits to be discarded. to the upper bound of the range of edits to be discarded.
limit
value.However, if {@link #end()} has been called on this
UndoManager, it will behave like a normal {@link
CompoundEdit}. In this case, all actions will be undone in
reverse order of addition. Typical applications will never call
{@link #end()} on their UndoManager
.
Throws: CannotUndoException if no action can be undone.
See Also: canUndo redo undoOrRedo
Thread Safety: This method may safely be invoked from concurrent threads. The caller does not need to perform external synchronization. This means that {@link javax.swing.event.UndoableEditEvent} sources do not need to broadcast their events from inside the Swing worker thread.
Parameters: event the event whose edit
will be
passed to {@link #addEdit}.
See Also: getEdit UndoManager
This is useful for applications that do not present a separate
undo and redo facility, but just have a single menu item for
undoing and redoing the very last action. Such applications will
use an UndoManager
whose limit
is 1.
Parameters: edit the last editing action to be undone.