package notepad; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.undo.CannotUndoException; class UndoAction extends AbstractAction { public static final long serialVersionUID = 1L; Notepad notepad; public UndoAction(Notepad notepad){ super( "Undo" ); putValue( Action.SMALL_ICON, new ImageIcon( this.getClass().getResource( "images/undo.gif" ) ) ); setEnabled( false ); this.notepad = notepad; } public void actionPerformed( ActionEvent e ) { try { notepad.getUndo().undo(); } catch ( CannotUndoException ex ) { System.out.println( "Unable to undo: " + ex ); ex.printStackTrace(); } update(); notepad.getRedoAction().update(); } protected void update() { if( notepad.getUndo().canUndo() ) { setEnabled( true ); putValue( "Undo", notepad.getUndo().getUndoPresentationName() ); } else { setEnabled( false ); putValue( Action.NAME, "Undo" ); } } }