Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.event.ActionEvent;
- import javax.swing.AbstractAction;
- import javax.swing.KeyStroke;
- import javax.swing.event.UndoableEditEvent;
- import javax.swing.event.UndoableEditListener;
- import javax.swing.text.AttributeSet;
- import javax.swing.text.BadLocationException;
- import javax.swing.text.JTextComponent;
- import javax.swing.text.PlainDocument;
- import javax.swing.undo.CompoundEdit;
- import javax.swing.undo.UndoManager;
- public class UndoComponentManager
- {
- @SuppressWarnings("serial")
- public static void addTo(JTextComponent component)
- {
- // Add custom undo document
- component.setDocument(new PlainDocument()
- {
- private CompoundEdit compoundEdit;
- @Override
- public void replace(int offset, int length, String text,
- AttributeSet attrs) throws BadLocationException
- {
- if (length == 0)
- {
- super.replace(offset, length, text, attrs);
- } else
- {
- compoundEdit = new CompoundEdit();
- super.fireUndoableEditUpdate(new UndoableEditEvent(this,
- compoundEdit));
- super.replace(offset, length, text, attrs);
- compoundEdit.end();
- }
- }
- });
- // Create UndoManager instance
- final UndoManager undoManager = new UndoManager();
- // Listen for edits on the component
- component.getDocument().addUndoableEditListener(
- new UndoableEditListener()
- {
- public void undoableEditHappened(UndoableEditEvent evt)
- {
- undoManager.addEdit(evt.getEdit());
- }
- });
- // Map CTRL + Y to redo action
- component.getActionMap().put("Undo", new AbstractAction("Undo")
- {
- public void actionPerformed(ActionEvent evt)
- {
- if (undoManager.canUndo())
- {
- undoManager.undo();
- }
- }
- });
- component.getInputMap()
- .put(KeyStroke.getKeyStroke("control Z"), "Undo");
- // Map CTRL + Y to redo action
- component.getActionMap().put("Redo", new AbstractAction("Redo")
- {
- public void actionPerformed(ActionEvent evt)
- {
- if (undoManager.canRedo())
- {
- undoManager.redo();
- }
- }
- });
- component.getInputMap()
- .put(KeyStroke.getKeyStroke("control Y"), "Redo");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement