Advertisement
BullyATWiiplaza

Java - JTextComponents Undo

Jun 27th, 2014
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.12 KB | None | 0 0
  1. import java.awt.event.ActionEvent;
  2.  
  3. import javax.swing.AbstractAction;
  4. import javax.swing.KeyStroke;
  5. import javax.swing.event.UndoableEditEvent;
  6. import javax.swing.event.UndoableEditListener;
  7. import javax.swing.text.AttributeSet;
  8. import javax.swing.text.BadLocationException;
  9. import javax.swing.text.JTextComponent;
  10. import javax.swing.text.PlainDocument;
  11. import javax.swing.undo.CompoundEdit;
  12. import javax.swing.undo.UndoManager;
  13.  
  14. public class UndoComponentManager
  15. {
  16.     @SuppressWarnings("serial")
  17.     public static void addTo(JTextComponent component)
  18.     {
  19.         // Add custom undo document
  20.         component.setDocument(new PlainDocument()
  21.         {
  22.             private CompoundEdit compoundEdit;
  23.  
  24.             @Override
  25.             public void replace(int offset, int length, String text,
  26.                     AttributeSet attrs) throws BadLocationException
  27.             {
  28.                 if (length == 0)
  29.                 {
  30.                     super.replace(offset, length, text, attrs);
  31.                 } else
  32.                 {
  33.                     compoundEdit = new CompoundEdit();
  34.  
  35.                     super.fireUndoableEditUpdate(new UndoableEditEvent(this,
  36.                             compoundEdit));
  37.  
  38.                     super.replace(offset, length, text, attrs);
  39.  
  40.                     compoundEdit.end();
  41.                 }
  42.             }
  43.         });
  44.  
  45.         // Create UndoManager instance
  46.         final UndoManager undoManager = new UndoManager();
  47.  
  48.         // Listen for edits on the component
  49.         component.getDocument().addUndoableEditListener(
  50.                 new UndoableEditListener()
  51.                 {
  52.                     public void undoableEditHappened(UndoableEditEvent evt)
  53.                     {
  54.                         undoManager.addEdit(evt.getEdit());
  55.                     }
  56.                 });
  57.  
  58.         // Map CTRL + Y to redo action
  59.         component.getActionMap().put("Undo", new AbstractAction("Undo")
  60.         {
  61.             public void actionPerformed(ActionEvent evt)
  62.             {
  63.                 if (undoManager.canUndo())
  64.                 {
  65.                     undoManager.undo();
  66.                 }
  67.             }
  68.         });
  69.         component.getInputMap()
  70.                 .put(KeyStroke.getKeyStroke("control Z"), "Undo");
  71.  
  72.         // Map CTRL + Y to redo action
  73.         component.getActionMap().put("Redo", new AbstractAction("Redo")
  74.         {
  75.             public void actionPerformed(ActionEvent evt)
  76.             {
  77.                 if (undoManager.canRedo())
  78.                 {
  79.                     undoManager.redo();
  80.                 }
  81.             }
  82.         });
  83.         component.getInputMap()
  84.                 .put(KeyStroke.getKeyStroke("control Y"), "Redo");
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement