# javax.swing.undo

***

**1. Undo and Redo Actions in Text Editor**

```java
import javax.swing.text.Document;
import javax.swing.undo.UndoManager;

class TextEditor {
    private UndoManager undoManager = new UndoManager();
    private Document document;

    public void undo() {
        if (undoManager.canUndo()) {
            undoManager.undo();
        }
    }

    public void redo() {
        if (undoManager.canRedo()) {
            undoManager.redo();
        }
    }

    public void addUndoableEdit(UndoableEdit edit) {
        undoManager.addEdit(edit);
    }

    // ...
}
```

**2. Undo and Redo in Drawing Application**

```java
import javax.swing.Action;
import javax.swing.JToolBar;

class DrawingApplication {
    private UndoManager undoManager = new UndoManager();
    private JToolBar toolbar;

    public DrawingApplication() {
        Action undoAction = undoManager.undoAction();
        Action redoAction = undoManager.redoAction();

        toolbar.add(undoAction);
        toolbar.add(redoAction);
    }

    public void addUndoableEdit(UndoableEdit edit) {
        undoManager.addEdit(edit);
    }

    // ...
}
```

**3. Undo and Redo in Image Editor**

```java
import javax.swing.undo.CompoundEdit;
import javax.swing.undo.UndoManager;

class ImageEditor {
    private UndoManager undoManager = new UndoManager();
    private Image image;

    public void rotateClockwise() {
        UndoableEdit edit = new RotateImageEdit(image, Math.PI / 2);
        CompoundEdit compoundEdit = new CompoundEdit();
        compoundEdit.addEdit(edit);
        undoManager.addEdit(compoundEdit);
    }

    // ...
}
```

**4. Undo and Redo in Spreadsheet**

```java
import javax.swing.JTable;
import javax.swing.undo.AbstractUndoableEdit;

class Spreadsheet {
    private JTable table;

    public void undo() {
        UndoableEdit edit = table.getEditingUndoableEdit();
        if (edit != null) {
            table.undo();
        }
    }

    public void redo() {
        UndoableEdit edit = table.getEditingUndoableEdit();
        if (edit != null) {
            table.redo();
        }
    }

    // ...
}
```

**5. Undo and Redo in Tree**

```java
import javax.swing.JTree;
import javax.swing.undo.UndoManager;

class Tree {
    private JTree tree;
    private UndoManager undoManager = new UndoManager();

    public void addChildNode(TreeNode childNode) {
        UndoableEdit edit = new AddChildNodeEdit(tree, childNode);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**6. Undo and Redo in List**

```java
import javax.swing.JList;
import javax.swing.undo.UndoManager;

class List {
    private JList list;
    private UndoManager undoManager = new UndoManager();

    public void addElement(Object element) {
        UndoableEdit edit = new AddElementEdit(list, element);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**7. Undo and Redo in Table**

```java
import javax.swing.JTable;
import javax.swing.undo.CompoundEdit;
import javax.swing.undo.UndoManager;

class Table {
    private JTable table;
    private UndoManager undoManager = new UndoManager();

    public void insertRow(int row) {
        CompoundEdit compoundEdit = new CompoundEdit();
        for (int i = 0; i < table.getColumnCount(); i++) {
            UndoableEdit edit = new InsertCellEdit(table, row, i, "");
            compoundEdit.addEdit(edit);
        }
        undoManager.addEdit(compoundEdit);
    }

    // ...
}
```

**8. Undo and Redo in Text Area**

```java
import javax.swing.JTextArea;
import javax.swing.undo.AbstractUndoableEdit;

class TextArea {
    private JTextArea textArea;

    public void undo() {
        UndoableEdit edit = textArea.getUndoableEdit();
        if (edit != null) {
            textArea.undo();
        }
    }

    public void redo() {
        UndoableEdit edit = textArea.getUndoableEdit();
        if (edit != null) {
            textArea.redo();
        }
    }

    // ...
}
```

**9. Undo and Redo in Calendar**

```java
import javax.swing.JCalendar;
import javax.swing.undo.UndoManager;

class Calendar {
    private JCalendar calendar;
    private UndoManager undoManager = new UndoManager();

    public void selectDate(Date date) {
        UndoableEdit edit = new SelectDateEdit(calendar, date);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**10. Undo and Redo in File Picker**

```java
import javax.swing.JFileChooser;
import javax.swing.undo.UndoManager;

class FilePicker {
    private JFileChooser fileChooser;
    private UndoManager undoManager = new UndoManager();

    public void selectFile(File file) {
        UndoableEdit edit = new SelectFileEdit(fileChooser, file);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**11. Undo and Redo in Color Picker**

```java
import javax.swing.JColorChooser;
import javax.swing.undo.UndoManager;

class ColorPicker {
    private JColorChooser colorChooser;
    private UndoManager undoManager = new UndoManager();

    public void selectColor(Color color) {
        UndoableEdit edit = new SelectColorEdit(colorChooser, color);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**12. Undo and Redo in Font Picker**

```java
import javax.swing.JFontChooser;
import javax.swing.undo.UndoManager;

class FontPicker {
    private JFontChooser fontChooser;
    private UndoManager undoManager = new UndoManager();

    public void selectFont(Font font) {
        UndoableEdit edit = new SelectFontEdit(fontChooser, font);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**13. Undo and Redo in Dialog**

```java
import javax.swing.JDialog;
import javax.swing.undo.UndoManager;

class Dialog {
    private JDialog dialog;
    private UndoManager undoManager = new UndoManager();

    public void openDialog() {
        UndoableEdit edit = new OpenDialogEdit(dialog);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**14. Undo and Redo in Menu**

```java
import javax.swing.JMenu;
import javax.swing.undo.UndoManager;

class Menu {
    private JMenu menu;
    private UndoManager undoManager = new UndoManager();

    public void addMenuItem(JMenuItem item) {
        UndoableEdit edit = new AddMenuItemEdit(menu, item);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**15. Undo and Redo in Toolbar**

```java
import javax.swing.JToolBar;
import javax.swing.undo.UndoManager;

class Toolbar {
    private JToolBar toolbar;
    private UndoManager undoManager = new UndoManager();

    public void addButton(JButton button) {
        UndoableEdit edit = new AddButtonEdit(toolbar, button);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**16. Undo and Redo in Panel**

```java
import javax.swing.JPanel;
import javax.swing.undo.UndoManager;

class Panel {
    private JPanel panel;
    private UndoManager undoManager = new UndoManager();

    public void addComponent(JComponent component) {
        UndoableEdit edit = new AddComponentEdit(panel, component);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**17. Undo and Redo in Split Pane**

```java
import javax.swing.JSplitPane;
import javax.swing.undo.UndoManager;

class SplitPane {
    private JSplitPane splitPane;
    private UndoManager undoManager = new UndoManager();

    public void setDividerLocation(int location) {
        UndoableEdit edit = new SetDividerLocationEdit(splitPane, location);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**18. Undo and Redo in Tabbed Pane**

```java
import javax.swing.JTabbedPane;
import javax.swing.undo.UndoManager;

class TabbedPane {
    private JTabbedPane tabbedPane;
    private UndoManager undoManager = new UndoManager();

    public void addTab(String title, JComponent component) {
        UndoableEdit edit = new AddTabEdit(tabbedPane, title, component);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**19. Undo and Redo in Tree Table**

```java
import javax.swing.JTreeTable;
import javax.swing.undo.UndoManager;

class TreeTable {
    private JTreeTable treeTable;
    private UndoManager undoManager = new UndoManager();

    public void insertRow(int row) {
        UndoableEdit edit = new InsertRowEdit(treeTable, row);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**20. Undo and Redo in Editor Pane**

```java
import javax.swing.JEditorPane;
import javax.swing.undo.UndoManager;

class EditorPane {
    private JEditorPane editorPane;
    private UndoManager undoManager = new UndoManager();

    public void insertText(String text) {
        UndoableEdit edit = new InsertTextEdit(editorPane, text);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**21. Undo and Redo in File Chooser**

```java
import javax.swing.JFileChooser;
import javax.swing.undo.UndoManager;

class FileChooser {
    private JFileChooser fileChooser;
    private UndoManager undoManager = new UndoManager();

    public void setFile(File file) {
        UndoableEdit edit = new SetFileEdit(fileChooser, file);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**22. Undo and Redo in JComboBox**

```java
import javax.swing.JComboBox;
import javax.swing.undo.UndoManager;

class JComboBox {
    private JComboBox comboBox;
    private UndoManager undoManager = new UndoManager();

    public void setSelectedItem(Object item) {
        UndoableEdit edit = new SetSelectedItemEdit(comboBox, item);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**23. Undo and Redo in JFormattedTextField**

```java
import javax.swing.JFormattedTextField;
import javax.swing.undo.UndoManager;

class JFormattedTextField {
    private JFormattedTextField textField;
    private UndoManager undoManager = new UndoManager();

    public void setText(String text) {
        UndoableEdit edit = new SetTextEdit(textField, text);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**24. Undo and Redo in JList**

```java
import javax.swing.JList;
import javax.swing.undo.UndoManager;

class JList {
    private JList list;
    private UndoManager undoManager = new UndoManager();

    public void setSelectedIndex(int index) {
        UndoableEdit edit = new SetSelectedIndexEdit(list, index);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**25. Undo and Redo in JMenuItem**

```java
import javax.swing.JMenuItem;
import javax.swing.undo.UndoManager;

class JMenuItem {
    private JMenuItem menuItem;
    private UndoManager undoManager = new UndoManager();

    public void setText(String text) {
        UndoableEdit edit = new SetTextEdit(menuItem, text);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**26. Undo and Redo in JPasswordField**

```java
import javax.swing.JPasswordField;
import javax.swing.undo.UndoManager;

class JPasswordField {
    private JPasswordField passwordField;
    private UndoManager undoManager = new UndoManager();

    public void setText(String text) {
        UndoableEdit edit = new SetTextEdit(passwordField, text);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**27. Undo and Redo in JProgressBar**

```java
import javax.swing.JProgressBar;
import javax.swing.undo.UndoManager;

class JProgressBar {
    private JProgressBar progressBar;
    private UndoManager undoManager = new UndoManager();

    public void setValue(int value) {
        UndoableEdit edit = new SetValueEdit(progressBar, value);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**28. Undo and Redo in JScrollPane**

```java
import javax.swing.JScrollPane;
import javax.swing.undo.UndoManager;

class JScrollPane {
    private JScrollPane scrollPane;
    private UndoManager undoManager = new UndoManager();

    public void setHorizontalScrollBarPolicy(int policy) {
        UndoableEdit edit = new SetHorizontalScrollBarPolicyEdit(scrollPane, policy);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**29. Undo and Redo in JSlider**

```java
import javax.swing.JSlider;
import javax.swing.undo.UndoManager;

class JSlider {
    private JSlider slider;
    private UndoManager undoManager = new UndoManager();

    public void setValue(int value) {
        UndoableEdit edit = new SetValueEdit(slider, value);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**30. Undo and Redo in JTabbedPane**

```java
import javax.swing.JTabbedPane;
import javax.swing.undo.UndoManager;

class JTabbedPane {
    private JTabbedPane tabbedPane;
    private UndoManager undoManager = new UndoManager();

    public void setSelectedIndex(int index) {
        UndoableEdit edit = new SetSelectedIndexEdit(tabbedPane, index);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**31. Undo and Redo in JTable**

```java
import javax.swing.JTable;
import javax.swing.undo.UndoManager;

class JTable {
    private JTable table;
    private UndoManager undoManager = new UndoManager();

    public void setValueAt(Object value, int row, int column) {
        UndoableEdit edit = new SetValueAtEdit(table, value, row, column);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**32. Undo and Redo in JTextPane**

```java
import javax.swing.JTextPane;
import javax.swing.undo.UndoManager;

class JTextPane {
    private JTextPane textPane;
    private UndoManager undoManager = new UndoManager();

    public void setText(String text) {
        UndoableEdit edit = new SetTextEdit(textPane, text);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**33. Undo and Redo in JToggleButton**

```java
import javax.swing.JToggleButton;
import javax.swing.undo.UndoManager;

class JToggleButton {
    private JToggleButton toggleButton;
    private UndoManager undoManager = new UndoManager();

    public void setSelected(boolean selected) {
        UndoableEdit edit = new SetSelectedEdit(toggleButton, selected);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**34. Undo and Redo in JToolBar**

```java
import javax.swing.JToolBar;
import javax.swing.undo.UndoManager;

class JToolBar {
    private JToolBar toolBar;
    private UndoManager undoManager = new UndoManager();

    public void add(JComponent component) {
        UndoableEdit edit = new AddComponentEdit(toolBar, component);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**35. Undo and Redo in JTree**

```java
import javax.swing.JTree;
import javax.swing.undo.UndoManager;

class JTree {
    private JTree tree;
    private UndoManager undoManager = new UndoManager();

    public void expandRow(int row) {
        UndoableEdit edit = new ExpandRowEdit(tree, row);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**36. Undo and Redo in JViewport**

```java
import javax.swing.JViewport;
import javax.swing.undo.UndoManager;

class JViewport {
    private JViewport viewport;
    private UndoManager undoManager = new UndoManager();

    public void setViewPosition(Point position) {
        UndoableEdit edit = new SetViewPositionEdit(viewport, position);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**37. Undo and Redo in List Model**

```java
import javax.swing.ListModel;
import javax.swing.undo.UndoManager;

class ListModel {
    private ListModel listModel;
    private UndoManager undoManager = new UndoManager();

    public void add(Object element) {
        UndoableEdit edit = new AddElementEdit(listModel, element);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**38. Undo and Redo in Spinner Model**

```java
import javax.swing.SpinnerModel;
import javax.swing.undo.UndoManager;

class SpinnerModel {
    private SpinnerModel spinnerModel;
    private UndoManager undoManager = new UndoManager();

    public void setValue(Object value) {
        UndoableEdit edit = new SetValueEdit(spinnerModel, value);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**39. Undo and Redo in Table Model**

```java
import javax.swing.table.TableModel;
import javax.swing.undo.UndoManager;

class TableModel {
    private TableModel tableModel;
    private UndoManager undoManager = new UndoManager();

    public void setValueAt(Object value, int row, int column) {
        UndoableEdit edit = new SetValueAtEdit(tableModel, value, row, column);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**40. Undo and Redo in Tree Model**

```java
import javax.swing.tree.TreeModel;
import javax.swing.undo.UndoManager;

class TreeModel {
    private TreeModel treeModel;
    private UndoManager undoManager = new UndoManager();

    public void add(TreeNode node) {
        UndoableEdit edit = new AddNodeEdit(treeModel, node);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**41. Undo and Redo in DefaultMutableTreeNode**

```java
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.undo.UndoManager;

class DefaultMutableTreeNode {
    private DefaultMutableTreeNode node;
    private UndoManager undoManager = new UndoManager();

    public void add(DefaultMutableTreeNode child) {
        UndoableEdit edit = new AddChildEdit(node, child);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**42. Undo and Redo in DefaultTreeModel**

```java
import javax.swing.tree.DefaultTreeModel;
import javax.swing.undo.UndoManager;

class DefaultTreeModel {
    private DefaultTreeModel treeModel;
    private UndoManager undoManager = new UndoManager();

    public void insertNodeInto(DefaultMutableTreeNode node, DefaultMutableTreeNode parent, int index) {
        UndoableEdit edit = new InsertNodeEdit(treeModel, node, parent, index);
        undoManager.addEdit(edit);
    }

    // ...
}
```

**43. Undo and Redo in UndoableEdit**

```java
import javax.swing.undo.UndoableEdit;
import javax.swing.undo.UndoManager;

class UndoableEdit {
    private UndoableEdit edit;
    private UndoManager undoManager = new UndoManager();

    public void addEdit(UndoableEdit edit) {
        UndoableEdit compoundEdit = new CompoundEdit();
        compoundEdit.addEdit(edit);
        undoManager.addEdit(compoundEdit);
    }

    // ...
}
```

**44. Undo and Redo in CompoundEdit**

```java
import javax.swing.undo.CompoundEdit;
import javax.swing.undo.UndoManager;

class CompoundEdit {
    private CompoundEdit compoundEdit;
    private UndoManager undoManager = new UndoManager();

    public void addEdit(UndoableEdit edit) {
        compoundEdit.addEdit(edit);
    }

    // ...
}
```

**45. Undo and Redo in AbstractUndoableEdit**

```java
import javax.swing.undo.AbstractUndoableEdit;
import javax.swing.undo.UndoManager;

class AbstractUndoableEdit {
    private AbstractUndoableEdit edit;
    private UndoManager undoManager = new UndoManager();

    public void undo() {
        undoManager.undo();
    }

    // ...
}
```

**46. Undo and Redo in UndoableEditSupport**

```java
import javax.swing.undo.UndoableEditSupport;
import javax.swing.undo.UndoManager;

class UndoableEditSupport {
    private UndoableEditSupport undoableEditSupport;
    private UndoManager undoManager = new UndoManager();

    public void addUndoableEdit(UndoableEdit edit) {
        undoableEditSupport.postEdit(edit);
    }

    // ...
}
```

**47. Undo and Redo in UndoableChangeSupport**

```java
import javax.swing.undo.UndoableChangeSupport;
import javax.swing.undo.UndoManager;

class UndoableChangeSupport {
    private UndoableChangeSupport undoableChangeSupport;
    private UndoManager undoManager = new UndoManager();

    public void addUndoableEdit(UndoableEdit edit) {
        undoableChangeSupport.postEdit(edit);
    }

    // ...
}
```

**48. Undo and Redo in UndoEvent**

```java
import javax.swing.undo.UndoEvent;
import javax.swing.undo.UndoManager;

class UndoEvent {
    private UndoEvent event;
    private UndoManager undoManager = new UndoManager();

    public void undoableEditHappened(UndoableEditEvent event) {
        undoManager.addEdit(event.getEdit());
    }

    // ...
}
```

**49. Undo and Redo in UndoableEditListener**

```java
import javax.swing.undo.UndoableEditListener;
import javax.swing.undo.UndoManager;

class UndoableEditListener implements UndoableEditListener {
    private UndoableEditListener listener;
    private UndoManager undoManager = new UndoManager();

    public void undoableEditHappened(UndoableEditEvent event) {
        undoManager.addEdit(event.getEdit());
    }

    // ...
}
```

**50. Undo and Redo in UndoManager**

```java
import javax.swing.undo.UndoManager;

class UndoManager {
    private UndoManager undoManager = new UndoManager();

    public void undo() {
        undoManager.undo();
    }

    // ...
}
```
