模块  java.desktop
软件包  javax.swing.undo

Class UndoManager

  • 实现的所有接口
    SerializableEventListenerUndoableEditListenerUndoableEdit

    public class UndoManager
    extends CompoundEdit
    implements UndoableEditListener
    UndoManager管理列表UndoableEdits ,提供了一种方法来撤消或恢复适当的编辑。 有两种方法可以向UndoManager添加编辑。 使用addEdit方法直接添加编辑,或将UndoManager添加到支持UndoableEditListener的bean。 以下示例创建UndoManager并将其作为UndoableEditListener添加到JTextField
      UndoManager undoManager = new UndoManager();
       JTextField tf = ...;
       tf.getDocument().addUndoableEditListener(undoManager); 

    UndoManager维护一个有序的编辑列表和该列表中下一个编辑的索引。 下一个编辑的索引是当前编辑列表的大小,或者如果已调用undo则它对应于撤消的最后一个重要编辑的索引。 调用undo ,将以相反的顺序撤消从下一次编辑的索引到最后一次重要编辑的所有编辑。 例如,考虑UndoManager其中包含以下编辑内容: A b D。 带粗体的大写字母的编辑很重要,小写和斜体的编辑是微不足道的。

    Figure 1 Figure 1

    figure 1所示,如果刚刚添加D ,则下一次编辑的索引将为4.调用undo导致在D上调用undo并将下一次编辑的索引设置为3(编辑c ),如下图所示。

    Figure 2 Figure 2

    最后一次重要编辑是A ,因此调用undo再次undo undo调用c , 和A上的undo ,将下一个编辑的索引设置为0,如下图所示。

    Figure 3 Figure 3

    调用redo导致在下一个编辑的索引和下一个重要编辑(或列表末尾)之间的所有编辑上调用redo 与前面的例子,如果继续redo被调用, redo将依次在A,BC调用。 此外,下一个编辑的索引设置为3(如figure 2中所示)。

    将编辑添加到UndoManager导致从下一个编辑的索引中删除所有编辑到列表末尾。 继续前面的示例,如果添加了新的编辑 ,则从列表中删除编辑D (在调用die之后)。 如果c未被下一次编辑合并( c.addEdit(e)返回true),或被其替换( e.replaceEdit(c)返回true),则在c后添加新编辑,如下图所示。

    Figure 4 Figure 4

    end上调用UndoManager ,超类行为将用于所有UndoableEdit方法。 有关其行为的更多详细信息,请参阅CompoundEdit

    与Swing的其余部分不同,此类是线程安全的。

    警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始,对java.beans软件包中添加了对所有JavaBeans java.beans长期存储的支持。 请参阅XMLEncoder

    另请参见:
    Serialized Form
    • 构造方法详细信息

      • UndoManager

        public UndoManager()
        创建一个新的 UndoManager
    • 方法详细信息

      • discardAllEdits

        public void discardAllEdits()
        清空撤消管理器在此过程中发送每个编辑 die消息。
        另请参见:
        AbstractUndoableEdit.die()
      • trimForLimit

        protected void trimForLimit()
        将排队编辑的数量减少到一个大小限制范围,以下一个编辑的索引为中心。
      • trimEdits

        protected void trimEdits​(int from,
                                 int to)
        删除指定范围内的编辑。 给定范围内的所有编辑(包括和以相反顺序)将die调用die ,并从编辑列表中删除。 如果from > to
        参数
        from - 要删除的最小索引
        to - 要删除的最大索引
      • editToBeUndone

        protected UndoableEdit editToBeUndone()
        如果调用undo则返回要撤消的下一个重要编辑。 如果没有要撤消的编辑,则返回null
        结果
        下一个重要的编辑要撤消
      • editToBeRedone

        protected UndoableEdit editToBeRedone()
        如果调用redo则返回要重做的下一个重要编辑。 如果没有要重做的编辑,则返回null
        结果
        下一个重要的编辑要重做
      • undoTo

        protected void undoTo​(UndoableEdit edit)
                       throws CannotUndoException
        撤消从下一个编辑索引到 edit所有更改,相应地更新下一个编辑的索引。
        参数
        edit - 要撤消的编辑
        异常
        CannotUndoException - 如果其中一个编辑引发 CannotUndoException
      • redoTo

        protected void redoTo​(UndoableEdit edit)
                       throws CannotRedoException
        重做从下一个编辑的索引的所有变化 edit ,适当地更新下一个编辑的索引。
        参数
        edit - 要重做的编辑
        异常
        CannotRedoException - 如果其中一个编辑引发 CannotRedoException
      • canUndoOrRedo

        public boolean canUndoOrRedo()
        如果可以调用 undoredo ,则返回true。
        结果
        如果调用 canUndoOrRedo有效, canUndoOrRedo true
        另请参见:
        undoOrRedo()
      • canUndo

        public boolean canUndo()
        如果可以撤消编辑,则返回true。 如果已调用end ,则返回super的值。 否则,如果要撤消任何编辑,则返回true( editToBeUndone返回非null )。
        Specified by:
        canUndo在界面 UndoableEdit
        重写:
        canUndoCompoundEdit
        结果
        如果要撤消编辑,则为true
        另请参见:
        CompoundEdit.canUndo()editToBeUndone()
      • canRedo

        public boolean canRedo()
        如果可以重做编辑,则返回true。 如果已调用end ,则返回super的值。 否则,如果要重做任何编辑,则返回true( editToBeRedone返回非null )。
        Specified by:
        canRedo在界面 UndoableEdit
        重写:
        canRedo在类 CompoundEdit
        结果
        如果要编辑重做,则为true
        另请参见:
        CompoundEdit.canRedo()editToBeRedone()
      • end

        public void end()
        将此UndoManager变为正常CompoundEdit 这将删除所有已撤消的编辑。
        重写:
        endCompoundEdit
        另请参见:
        CompoundEdit.end()
      • getUndoOrRedoPresentationName

        public String getUndoOrRedoPresentationName()
        返回getUndoPresentationNamegetRedoPresentationName便捷方法。 如果下一个编辑的索引等于编辑列表的大小, getUndoPresentationName返回,否则getRedoPresentationName返回。
        结果
        撤消或重做名称
      • toString

        public String toString()
        返回显示和标识此对象属性的字符串。
        重写:
        toStringCompoundEdit
        结果
        此对象的String表示形式