Module java.desktop
Package javax.swing.undo

Interface UndoableEdit

所有已知的实现类:
AbstractDocument.DefaultDocumentEvent, AbstractDocument.ElementEdit, AbstractUndoableEdit, CompoundEdit, DefaultStyledDocument.AttributeUndoableEdit, StateEdit, UndoManager

public interface UndoableEdit
UndoableEdit表示一个编辑。该编辑可以被撤消,或者如果已经被撤消,则可以重新执行。

UndoableEdit设计用于与UndoManager一起使用。由于UndoableEdit是由UndoableEditListener生成的,因此它们通常被添加到UndoManager中。当UndoableEdit被添加到UndoManager时,会发生以下情况(假设UndoManager上尚未调用end):

  1. 如果UndoManager包含编辑,则将在当前编辑上调用addEdit,并将新编辑作为参数传递。如果addEdit返回true,则假定新编辑已合并到当前编辑中,并且新编辑不会被添加到当前编辑列表中。编辑可以使用addEdit作为较小编辑合并到较大编辑中并被视为单个编辑的一种方式。
  2. 如果addEdit返回false,则会调用replaceEdit,并将当前编辑作为参数传递给新编辑。这是addEdit的反向操作 - 如果新编辑从replaceEdit返回true,则新编辑将替换当前编辑。
UndoManager利用isSignificant来确定应撤消或重做多少次编辑。UndoManager将撤消或重做当前编辑和上一个或下一个重要编辑之间的所有不重要编辑(isSignificant返回false)。通过从isSignificant返回false,addEditreplaceEdit可用于将多个编辑视为单个编辑,从addEdit方法也可以实现类似的功能。
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    将一个UndoableEdit添加到此UndoableEdit
    boolean
    如果此编辑可以重新执行,则返回true。
    boolean
    如果此编辑可以撤消,则返回true。
    void
    die()
    通知编辑不应再使用。
    返回此编辑的本地化、人类可读的描述,适合在更改日志中使用。
    返回此编辑的可重做形式的本地化、人类可读的描述,适合用作“重做”菜单项等。
    返回此编辑的可撤销形式的本地化、人类可读的描述,适合用作“撤销”菜单项等。
    boolean
    如果此编辑被认为是重要的,则返回true。
    void
    redo()
    重新应用此编辑。
    boolean
    如果此UndoableEdit应替换anEdit,则返回true。
    void
    undo()
    撤消编辑。
  • Method Details

    • undo

      void undo() throws CannotUndoException
      撤消编辑。
      抛出:
      CannotUndoException - 如果此编辑无法撤消
    • canUndo

      boolean canUndo()
      如果此编辑可以撤消,则返回true。
      返回:
      如果此编辑可以撤消,则返回true
    • redo

      void redo() throws CannotRedoException
      重新应用此编辑。
      抛出:
      CannotRedoException - 如果此编辑无法重新执行
    • canRedo

      boolean canRedo()
      如果此编辑可以重新执行,则返回true。
      返回:
      如果此编辑可以重新执行,则返回true
    • die

      void die()
      通知编辑不应再使用。一旦将UndoableEdit标记为无效,它将无法再被撤消或重新执行。

      这是一个有用的钩子,用于在无法再执行撤消或重做操作时清理不再需要的状态 - 例如,删除对象使用的文件资源,这些对象无法再被撤销。在UndoManager在出队编辑之前调用此方法。

      请注意,这是一个单向操作。没有“取消死亡”的方法。

      参见:
    • addEdit

      boolean addEdit(UndoableEdit anEdit)
      将一个UndoableEdit添加到此UndoableEdit。此方法可用于将较小的编辑合并为较大的复合编辑。例如,文本编辑器通常允许撤消操作应用于单词或句子。文本编辑器可能选择在每个键事件上生成编辑,但允许将这些编辑合并为更用户友好的单元,例如单词。在这种情况下,UndoableEdit将覆盖addEdit,以便在编辑可以合并时返回true。

      返回true表示anEdit已合并到此编辑中。返回false表示anEdit可能无法合并到此编辑中。

      通常,接收者已经在UndoManager(或其他UndoableEditListener)的队列中,并且正在有机会合并anEdit,而不是让其依次添加到队列中。

      如果从现在开始返回true,则anEdit必须从canUndocanRedo返回false,并且必须在undoredo上抛出适当的异常。

      参数:
      anEdit - 要添加的编辑
      返回:
      如果anEdit可以合并到此编辑中,则返回true
    • replaceEdit

      boolean replaceEdit(UndoableEdit anEdit)
      如果此UndoableEdit应替换anEdit,则返回true。此方法由CompoundEditUndoManager使用;如果anEdit无法添加到当前编辑中(addEdit返回false),则会调用此方法。

      此方法提供了一种让编辑替换现有编辑的方式。

      此消息是addEdit的相反操作 - anEdit通常已经排队在UndoManager(或其他UndoableEditListener)中,并且接收者正在有机会取代它。

      如果从现在开始返回true,则anEdit必须从canUndo()和canRedo()返回false,并且必须在undo()或redo()上抛出适当的异常。

      参数:
      anEdit - 替换当前编辑的编辑
      返回:
      如果此编辑应替换anEdit,则返回true
    • isSignificant

      boolean isSignificant()
      如果此编辑被认为是重要的,则返回true。通常,重要的编辑是应该呈现给用户的编辑,例如在菜单项或工具提示中。UndoManager将撤消或重做所有不重要的编辑,直到下一个重要编辑。
      返回:
      如果此编辑是重要的,则返回true
    • getPresentationName

      String getPresentationName()
      返回此编辑的本地化、人类可读的描述,适合在更改日志中使用。
      返回:
      此编辑的描述
    • getUndoPresentationName

      String getUndoPresentationName()
      返回此编辑的可撤销形式的本地化、人类可读的描述,适合用作“撤销”菜单项等。通常从getPresentationName派生。
      返回:
      此编辑的可撤销形式的描述
    • getRedoPresentationName

      String getRedoPresentationName()
      返回此编辑的可重做形式的本地化、人类可读的描述,适合用作“重做”菜单项等。通常从getPresentationName派生。
      返回:
      此编辑的可重做形式的描述