Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

javax.swing.undo
Class StateEdit  view StateEdit download StateEdit.java

java.lang.Object
  extended byjavax.swing.undo.AbstractUndoableEdit
      extended byjavax.swing.undo.StateEdit
All Implemented Interfaces:
java.io.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 55 .
  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() 55 method of the StateEdit. The end() method does two things.
    • The edited object receives a second request for storing its state. This time, it will use a different hash table, postState 55 .
    • To increase efficiency, the StateEdit now removes any entries from preState 55 and postState 55 that have the same key, and whose values are equal. Equality is determined by invoking the equals method inherited from java.lang.Object.
  4. When the user later chooses to undo the StateEdit, the edited object is asked to restore its state 55 from the preState 55 table. Similarly, when the user chooses to redo the StateEdit, the edited object gets asked to restore its state from the postState 55 .


Field Summary
protected  StateEditable object
          The object which is being edited by this StateEdit.
protected  java.util.Hashtable postState
          The state of object at the time when end() 55 was called.
protected  java.util.Hashtable preState
          The state of object at the time of constructing this StateEdit.
protected static java.lang.String RCSID
          The ID of the Java source file in Sun’s Revision Control System (RCS).
protected  java.lang.String undoRedoName
          A human-readable name for this edit action.
 
Fields inherited from class javax.swing.undo.AbstractUndoableEdit
RedoName, serialVersionUID, UndoName
 
Constructor Summary
StateEdit(StateEditable obj)
          Constructs a StateEdit, specifying the object whose state is being edited.
StateEdit(StateEditable obj, java.lang.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.
 java.lang.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, java.lang.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 java.lang.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 java.util.Hashtable preState
The state of object at the time of constructing this StateEdit.


postState

protected java.util.Hashtable postState
The state of object at the time when end() 55 was called.


undoRedoName

protected java.lang.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.


StateEdit

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

Method Detail

init

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


end

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


undo

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

Specified by:
undo in interface UndoableEdit
Overrides:
undo in class AbstractUndoableEdit

redo

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

Specified by:
redo in interface UndoableEdit
Overrides:
redo in class AbstractUndoableEdit

getPresentationName

public java.lang.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

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.