import java.awt.event.ActionEvent;
import javax.swing.*;

class UndoAction extends AbstractAction {
  public UndoAction() {
    super("Undo");
    setEnabled(false);
  }
  
  public void actionPerformed(ActionEvent e) {
    try {
      undo.undo();
    } catch (CannotUndoException ex) {
      System.out.println("Unable to undo: " + ex);
      ex.printStackTrace();
    }
    update();
    redoAction.update();
  }
  
  protected void update() {
    if (undo.canUndo()) {
      setEnabled(true);
      putValue(Action.NAME, undo.getUndoPresentationName());
    } else {
      setEnabled(false);
      putValue(Action.NAME, "Undo");
    }
  }      
}    
