Mega Code Archive

 
Categories / Java / Swing JFC
 

Creating TextArea with Undo, Redo Capabilities

import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoManager; class UndoableTextArea extends JTextArea implements UndoableEditListener, FocusListener,     KeyListener {   private UndoManager m_undoManager;   public UndoableTextArea() {     this(new String());   }   public UndoableTextArea(String text) {     super(text);     getDocument().addUndoableEditListener(this);     this.addKeyListener(this);     this.addFocusListener(this);   }   private void createUndoMananger() {     m_undoManager = new UndoManager();     m_undoManager.setLimit(10);   }   private void removeUndoMananger() {     m_undoManager.end();   }   public void focusGained(FocusEvent fe) {     createUndoMananger();   }   public void focusLost(FocusEvent fe) {     removeUndoMananger();   }   public void undoableEditHappened(UndoableEditEvent e) {     m_undoManager.addEdit(e.getEdit());   }   public void keyPressed(KeyEvent e) {     if ((e.getKeyCode() == KeyEvent.VK_Z) && (e.isControlDown())) {       try {         m_undoManager.undo();       } catch (CannotUndoException cue) {         Toolkit.getDefaultToolkit().beep();       }     }     if ((e.getKeyCode() == KeyEvent.VK_Y) && (e.isControlDown())) {       try {         m_undoManager.redo();       } catch (CannotRedoException cue) {         Toolkit.getDefaultToolkit().beep();       }     }   }   public void keyReleased(KeyEvent e) {   }   public void keyTyped(KeyEvent e) {   } } public class Main extends JFrame {   UndoableTextArea m_undoableTextArea = new UndoableTextArea();   public Main() {     JScrollPane sc = new JScrollPane(m_undoableTextArea);     getContentPane().setLayout(new BorderLayout(10, 10));     getContentPane()         .add(BorderLayout.NORTH, new JLabel("Press, CTRL+Z to Undo, CTRL+Y to Redo..."));     getContentPane().add(BorderLayout.CENTER, sc);   }   public static void main(String[] arg) {     Main m = new Main();     m.setVisible(true);     m.setSize(new Dimension(400, 300));     m.validate();   } }