Swing/UndoManager のバックアップの現在との差分(No.13)
- category: swing folder: UndoManager title: UndoManagerでJTextFieldのUndo、Redoを行う tags: [JTextField, JTextComponent, UndoManager, ActionMap, Document] author: aterai pubdate: 2009-06-15T13:35:15+09:00 description: JTextFieldのドキュメントにUndoManagerを追加して、Undo、Redoを行います。 image:
概要
JTextField
のドキュメントにUndoManager
を追加して、Undo
、Redo
を行います。
Screenshot
Advertisement
サンプルコード
private static void initUndoRedo(JTextComponent tc) {
UndoManager manager = new UndoManager();
tc.getDocument().addUndoableEditListener(manager);
tc.getActionMap().put("undo", new UndoAction(manager));
tc.getActionMap().put("redo", new RedoAction(manager));
InputMap imap = tc.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
imap.put(KeyStroke.getKeyStroke(
KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "undo");
imap.put(KeyStroke.getKeyStroke(
KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "redo");
}
#spanadd
#spanend
private static class UndoAction extends AbstractAction {
private final UndoManager undoManager;
public UndoAction(UndoManager manager) {
super("undo");
this.undoManager = manager;
}
#spanadd
#spanend
@Override public void actionPerformed(ActionEvent e) {
try {
undoManager.undo();
} catch (CannotUndoException cue) {
//cue.printStackTrace();
} catch (CannotUndoException ex) {
// ex.printStackTrace();
Toolkit.getDefaultToolkit().beep();
}
}
}
View in GitHub: Java, Kotlin解説
Document#addUndoableEditListener(UndoManager)
メソッドを使用してJTextField
にUndoManager
を追加し、以下のキー入力でUndo
、Redo
が実行できるように設定しています。
-
Document#addUndoableEditListener(UndoManager)
メソッドを使用してJTextField
にUndoManager
を追加し、以下のキー入力でUndo
、Redo
が実行可能になるよう設定-
Undo
: Ctrl+Z -
Redo
: Ctrl+Y
-
-
Undo
: Ctrl+Z -
Redo
: Ctrl+Y
参考リンク
- Implementing Undo and Redo (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
- UndoManager (Java Platform SE 8)
- UndoManagerを使用した文字列選択ペーストの動作を変更する