javax.swing.undo
Class StateEdit

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

public class StateEdit
extends AbstractUndoableEdit

A helper class, making it easy to support undo and redo.

The following example shows how to use this class.

 Foo foo; // class Foo implements StateEditable
 StateEdit edit;

 edit = new StateEdit(foo, "Name Change");
 foo.setName("Jane Doe");
 edit.end();
 undoManager.addEdit(edit);
 

If Foo’s implementation of StateEditable considers the name as part of the editable state, the user can now choose “Undo Name Change” or “Redo Name Change” from the respective menu. No further undo support is needed from the application.

The following explains what happens in the example.

  1. When a StateEdit is created, the associated StateEditable gets asked to store its state into a hash table, preState.
  2. The application will now perform some changes to the edited object. This typically happens by invoking methods on the edited object.
  3. The editing phase is terminated by invoking the end() method of the StateEdit. The end() method does two things.
  4. When the user later chooses to undo the StateEdit, the edited object is asked to restore its state from the preState table. Similarly, when the user chooses to redo the StateEdit, the edited object gets asked to restore its state from the postState.

See Also:
Serialized Form

Field Summary
protected  StateEditable object
          The object which is being edited by this StateEdit.
protected  Hashtable<Object,Object> postState
          The state of object at the time when end() was called.
protected  Hashtable<Object,Object> preState
          The state of object at the time of constructing this StateEdit.
protected static String RCSID
          The ID of the Java source file in Sun’s Revision Control System (RCS).
protected  String undoRedoName
          A human-readable name for this edit action.
 
Fields inherited from class javax.swing.undo.AbstractUndoableEdit
RedoName, UndoName
 
Constructor Summary
StateEdit(StateEditable obj)
          Constructs a StateEdit, specifying the object whose state is being edited.
StateEdit(StateEditable obj, String name)
          Constructs a StateEdit, specifying the object whose state is being edited.
 
Method Summary
 void end()
          Informs this StateEdit that all edits are finished.
 String getPresentationName()
          Returns a human-readable, localized name that describes this editing action and can be displayed to the user.
protected  void init(StateEditable obj, String name)
          Initializes this StateEdit.
 void redo()
          Redoes this edit operation.
protected  void removeRedundantState()
          Removes all redundant entries from the pre- and post-edit state hash tables.
 void undo()
          Undoes this edit operation.
 
Methods inherited from class javax.swing.undo.AbstractUndoableEdit
addEdit, canRedo, canUndo, die, getRedoPresentationName, getUndoPresentationName, isSignificant, replaceEdit, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

RCSID

protected static final String RCSID
The ID of the Java source file in Sun’s Revision Control System (RCS). This certainly should not be part of the API specification. But in order to be API-compatible with Sun’s reference implementation, GNU Classpath also has to provide this field and match its value. The value used here has been in every JDK release at least from 1.2 to 1.5.

See Also:
Constant Field Values

object

protected StateEditable object
The object which is being edited by this StateEdit.


preState

protected Hashtable<Object,Object> preState
The state of object at the time of constructing this StateEdit.


postState

protected Hashtable<Object,Object> postState
The state of object at the time when end() was called.


undoRedoName

protected String undoRedoName
A human-readable name for this edit action.

Constructor Detail

StateEdit

public StateEdit(StateEditable obj)
Constructs a StateEdit, specifying the object whose state is being edited.

Parameters:
obj - the object whose state is being edited by this StateEdit.

StateEdit

public StateEdit(StateEditable obj,
                 String name)
Constructs a StateEdit, specifying the object whose state is being edited.

Parameters:
obj - the object whose state is being edited by this StateEdit.
name - the human-readable name of the editing action.
Method Detail

init

protected void init(StateEditable obj,
                    String name)
Initializes this StateEdit. The edited object will be asked to store its current state into preState.

Parameters:
obj - the object being edited.
name - the human-readable name of the editing action.

end

public void end()
Informs this StateEdit that all edits are finished. The edited object will be asked to store its state into postState, and any redundant entries will get removed from preState and postState.


undo

public void undo()
Undoes this edit operation. The edited object will be asked to restore its state from preState.

Specified by:
undo in interface UndoableEdit
Overrides:
undo in class AbstractUndoableEdit
Throws:
CannotUndoException - if AbstractUndoableEdit.canUndo() returns false, for example because this action has already been undone.
See Also:
AbstractUndoableEdit.canUndo(), AbstractUndoableEdit.redo()

redo

public void redo()
Redoes this edit operation. The edited object will be asked to restore its state from postState.

Specified by:
redo in interface UndoableEdit
Overrides:
redo in class AbstractUndoableEdit
Throws:
CannotRedoException - if AbstractUndoableEdit.canRedo() returns false, for example because this action has not yet been undone.
See Also:
AbstractUndoableEdit.canRedo(), AbstractUndoableEdit.undo()

getPresentationName

public String getPresentationName()
Returns a human-readable, localized name that describes this editing action and can be displayed to the user.

Specified by:
getPresentationName in interface UndoableEdit
Overrides:
getPresentationName in class AbstractUndoableEdit
Returns:
the name, or null if no presentation name is available.

removeRedundantState

protected void removeRedundantState()
Removes all redundant entries from the pre- and post-edit state hash tables. An entry is considered redundant if it is present both before and after the edit, and if the two values are equal.