import javax.swing.undo.UndoManager; static A jenableUndoRedo(A textcomp) { swing { new UndoManager undo; vm_generalWeakSet("Undo Managers").add(undo); setMeta(textcomp, "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; }