2

Swing アプリケーションでUndoManagerを使用しています。undo()redo()addEdit()またはその他のメソッドが UndoManager で呼び出された場合、最終的に [元に戻す] ボタンと [やり直し] ボタンを有効または無効にする必要があります。

これらのメソッド呼び出しに反応する方法が見つかりません。この目的のために実装された Observer または Listener パターンはないようです。

そして、UndoManager メソッドが呼び出されるたびに、元に戻すボタンとやり直しボタンの有効なプロパティを更新します...これはベスト プラクティスではありませんか?!

例:

  • Edit > insert -- Edit を UndoManager に追加します。
  • Edit > cut -- Edit を UndoManager に追加します。

どちらの場合も、[元に戻す] ボタンを有効にする必要があります (有効になっていない場合)。UndoManager でこれらすべての変更に対応する方法が必要です!

4

1 に答える 1

1

元に戻すボタンとやり直しボタンにリスナーを追加します。UndoManagerは、元に戻すまたはやり直すために使用しているSwingコンポーネントを認識していません。

これは、元に戻すボタンのボタンリスナーを示すスニペットです。

// Add a listener to the undo button. It attempts to call undo() on the
// UndoManager, then enables/disables the undo/redo buttons as
// appropriate.
undoButton.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent ev) {
    try {
      manager.undo();
    } catch (CannotUndoException ex) {
      ex.printStackTrace();
    } finally {
      updateButtons();
    }
  }
});

  // Method to set the text and state of the undo/redo buttons.
  protected void updateButtons() {
    undoButton.setText(manager.getUndoPresentationName());
    redoButton.setText(manager.getRedoPresentationName());
    undoButton.getParent().validate();
    undoButton.setEnabled(manager.canUndo());
    redoButton.setEnabled(manager.canRedo());
  }
于 2012-09-21T16:47:48.793 に答える