import javax.swing.undo.UndoManager; static A jenableUndoRedo(A textcomp) { final new UndoManager undo; textcomp.getDocument().addUndoableEditListener(new UndoableEditListener() { public void undoableEditHappened(UndoableEditEvent evt) { undo.addEdit(evt.getEdit()); } }); textcomp.getActionMap().put("Undo", abstractAction("Undo", r { if (undo.canUndo()) undo.undo() })); textcomp.getActionMap().put("Redo", abstractAction("Redo", r { if (undo.canRedo()) undo.redo() })); textcomp.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo"); textcomp.getInputMap().put(KeyStroke.getKeyStroke("control Y"), "Redo"); ret textcomp; }