TITLE:UndoManagerでJTextFieldのUndo、Redoを行う
Posted by terai at 2009-06-15

UndoManagerでJTextFieldのUndo、Redoを行う

JTextFieldのドキュメントにUndoManagerを追加して、Undo、Redoを行います。
  • 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: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTWX1uwgqI/AAAAAAAAApI/zvwc9TUlj4E/s800/UndoManager.png

概要

JTextFieldのドキュメントにUndoManagerを追加して、UndoRedoを行います。

#screenshot

サンプルコード

#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
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, Event.CTRL_MASK), "undo");
  imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Event.CTRL_MASK), "redo");
  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;
  }
  public void actionPerformed(ActionEvent e) {
    try{
#spanadd

#spanend
  @Override public void actionPerformed(ActionEvent e) {
    try {
      undoManager.undo();
    }catch(CannotUndoException cue) {
      //cue.printStackTrace();
    } catch (CannotUndoException ex) {
      // ex.printStackTrace();
      Toolkit.getDefaultToolkit().beep();
    }
  }
}

解説

Document#addUndoableEditListener(UndoManager)メソッドを使って、JTextFieldでUndo、Redoができるように設定しています。
  • Undo
    • Ctrl-Z
  • Redo
    • Ctrl-Y

解説

  • Document#addUndoableEditListener(UndoManager)メソッドを使用してJTextFieldUndoManagerを追加し、以下のキー入力でUndoRedoが実行可能になるよう設定
    • Undo: Ctrl+Z
    • Redo: Ctrl+Y

参考リンク

参考リンク

コメント

コメント