2

我在我的 Swing 应用程序中使用UndoManager 。如果在 UndoManager 上调用undo()、或其他方法redo()addEdit()则最终必须启用或禁用 Undo 和 Redo 按钮。

我找不到对这些方法调用做出反应的方法。似乎没有为此目的实现观察者或监听者模式。

并且每次调用 UndoManager 方法时都更新 Undo 和 Redo 按钮的 enabled 属性……这不是最佳实践吗?!

一个例子:

  • Edit > insert -- 向 UndoManager 添加一个 Edit
  • Edit > cut -- 向 UndoManager 添加一个 Edit

在这两种情况下,都必须启用撤消按钮(如果尚未启用)。我需要一种方法来应对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 回答