While going through some extensions, I realized that most of them don’t have the undo and redo functionality. So after searching the internet, I have made a small function to do the same. Just call that function with the first parameter as your TextArea/TextView.

Github Gist: https://gist.github.com/yashrs/e4e064f036157dbbb0675bee6d88caee

public void addUndoRedoCapabilities(JTextArea textcomp){
        final UndoManager undo = new UndoManager();
        Document doc = textcomp.getDocument();
        // Listen for undo and redo events
        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) {
                        }
                    }
                });

        // Bind the undo action to ctl-Z
        textcomp.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");

        // Create a redo action and add it to the text component
        textcomp.getActionMap().put("Redo",
                new AbstractAction("Redo") {
                    public void actionPerformed(ActionEvent evt) {
                        try {
                            if (undo.canRedo()) {
                                undo.redo();
                            }
                        }
                        catch (CannotRedoException e) {
                        }
                    }
                });
        // Bind the redo action to ctl-Y
        textcomp.getInputMap().put(KeyStroke.getKeyStroke("control Y"), "Redo");
    }

Thanks for reading! Hope you learnt something new

Categories: Uncategorized