Mega Code Archive

 
Categories / Java Tutorial / Swing
 

Adding Undo and Redo to a Text Component

import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.text.Document; import javax.swing.text.JTextComponent; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoManager; public class Main{ public static void main(String[] argv) throws Exception{     JTextComponent textcomp = new JTextArea();     final UndoManager undo = new UndoManager();     Document doc = textcomp.getDocument();     JFrame f = new JFrame();     f.add(new JScrollPane(textcomp));     f.setSize(330,300);     f.setVisible(true);          doc.addUndoableEditListener(new UndoableEditListener() {         public void undoableEditHappened(UndoableEditEvent evt) {             undo.addEdit(evt.getEdit());         }     });          textcomp.getActionMap().put("Undo",         new AbstractAction("Undo") {             public void actionPerformed(ActionEvent evt) {                 try {                     if (undo.canUndo()) {                         undo.undo();                     }                 } catch (CannotUndoException e) {                 }             }        });          textcomp.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");          textcomp.getActionMap().put("Redo",         new AbstractAction("Redo") {             public void actionPerformed(ActionEvent evt) {                 try {                     if (undo.canRedo()) {                         undo.redo();                     }                 } catch (CannotRedoException e) {                 }             }         });          textcomp.getInputMap().put(KeyStroke.getKeyStroke("control Y"), "Redo"); }}