00001 package plp;
00002
00003 import java.awt.event.ActionEvent;
00004
00005 import javax.swing.AbstractAction;
00006 import javax.swing.JTextArea;
00007 import javax.swing.KeyStroke;
00008 import javax.swing.event.UndoableEditEvent;
00009 import javax.swing.event.UndoableEditListener;
00010 import javax.swing.text.Document;
00011 import javax.swing.undo.CannotRedoException;
00012 import javax.swing.undo.CannotUndoException;
00013 import javax.swing.undo.UndoManager;
00014
00015 public class UndoUtil {
00016
00017 public static void registerUndoManager(JTextArea textArea) {
00018 final UndoManager undo = new UndoManager();
00019 Document doc = textArea.getDocument();
00020
00021
00022 doc.addUndoableEditListener(new UndoableEditListener() {
00023 public void undoableEditHappened(UndoableEditEvent evt) {
00024 undo.addEdit(evt.getEdit());
00025 }
00026 });
00027
00028
00029 textArea.getActionMap().put("Undo", new AbstractAction("Undo") {
00030 private static final long serialVersionUID = 1L;
00031
00032 public void actionPerformed(ActionEvent evt) {
00033 try {
00034 if (undo.canUndo()) {
00035 undo.undo();
00036 }
00037 } catch (CannotUndoException e) {
00038 }
00039 }
00040 });
00041
00042
00043 textArea.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");
00044
00045
00046 textArea.getActionMap().put("Redo", new AbstractAction("Redo") {
00047 private static final long serialVersionUID = 1L;
00048
00049 public void actionPerformed(ActionEvent evt) {
00050 try {
00051 if (undo.canRedo()) {
00052 undo.redo();
00053 }
00054 } catch (CannotRedoException e) {
00055 }
00056 }
00057 });
00058
00059
00060 textArea.getInputMap().put(KeyStroke.getKeyStroke("control Y"), "Redo");
00061 }
00062
00063 }