モジュール java.desktop
パッケージ javax.swing.undo

クラスUndoManager

  • すべての実装されたインタフェース:
    Serializable, EventListener, UndoableEditListener, UndoableEdit

    public class UndoManager
    extends CompoundEdit
    implements UndoableEditListener
    UndoManagerは、UndoableEditsのリストを管理し、編集結果を選択してその内容を元に戻したり再実行したりできます。 UndoManagerに編集結果を追加する方法は2とおりあります。 1つはaddEditメソッドを使って直接編集結果を追加する方法、もう1つはUndoableEditListenerをサポートするBeanにUndoManagerを追加する方法です。 次のコード例では、UndoManagerを作成し、これをUndoableEditListenerとしてJTextFieldに追加します。
       UndoManager undoManager = new UndoManager();
       JTextField tf = ...;
       tf.getDocument().addUndoableEditListener(undoManager);
     

    UndoManagerは、編集結果の順序付きリストと、このリスト内の次の編集結果のインデックスを管理します。 次の編集結果のインデックスは、現在の編集結果のリストのサイズか、undoが呼び出されている場合は前回取り消された重大な編集内容のインデックスになります。 undoが呼び出されると、次の編集結果のインデックスから前回の重大な編集結果までのすべての編集結果が逆順に取り消されます。 たとえば、A b c Dという編集結果から成るUndoManagerがあるとします。 アルファベットの大文字で表された編集結果(太字)は重大な編集結果、アルファベットの小文字で表された編集結果(斜体)は小さな編集結果です。

    図1
    図1

    図1に示すように、Dが追加されたばかりの場合、次の編集のインデックスは4になります。 undoを呼び出すと、Dに対してundoが呼び出され、次の編集のインデックスが3 (cを編集)に設定されます。次の図を参照してください。

    図2
    図2

    前回の重大な編集結果はAです。undoを再度呼び出すと、cb、およびAに対して、この順番でundoが呼び出され、次の編集結果のインデックスが0になります。次の図を参照してください。

    図3
    図3

    redoを呼び出すと、次の編集結果のインデックスから次の重大な編集結果(リストの末尾)までのすべての編集結果に対してredoが呼び出されます。 先ほどの例の続きで、redoを呼び出した場合、Ab、およびcに対して、この順番でredoが呼び出されます。 また、次の編集結果のインデックスが3に設定されます(図2を参照)。

    UndoManagerに編集結果を追加すると、次の編集結果のインデックスからリストの末尾までのすべての編集結果が削除されます。 先ほどの例の続きで、新しい編集結果eを追加すると、編集結果Dに対してdieが呼び出されたあと、この編集結果がリストから削除されます。 cが次の編集結果に組み込まれていない場合(c.addEdit(e)の戻り値がtrueの場合)、またはcが次の編集結果で置き換えられる場合(e.replaceEdit(c)の戻り値がtrueの場合)、次の図のようにcの後ろに新しい編集結果が追加されます。

    図4
    図4

    UndoManagerに対してendが呼び出されると、すべてのUndoableEditメソッドに対してスーパー・クラスの動作が適用されます。 この動作の詳細については、CompoundEditを参照してください。

    このクラスは、ほかのSwingのクラスとは異なり、スレッドに対して安全です。

    警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースとの互換性がなくなる予定です。 現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。 1.4以降、すべてのJavaBeans™用の長期間の格納サポートがjava.beansパッケージに追加されています。 XMLEncoderを参照してください。

    関連項目:
    直列化された形式
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      UndoManager()
      新しいUndoManagerを作成します。
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      boolean addEdit​(UndoableEdit anEdit)
      可能であれば、このUndoManagerUndoableEditを追加します。
      boolean canRedo()
      編集結果を再実行できる場合はtrueを返します。
      boolean canUndo()
      編集結果を取り消せる場合はtrueを返します。
      boolean canUndoOrRedo()
      undoまたはredoを呼び出せる場合はtrueを返します。
      void discardAllEdits()
      undoマネージャを空にして、各編集結果の進行時にdieメッセージを送ります。
      protected UndoableEdit editToBeRedone()
      redoが呼び出されたときにやり直す次の重要な編集を返します。
      protected UndoableEdit editToBeUndone()
      undoが呼び出された場合に元に戻す次の重要な編集を返します。
      void end()
      このUndoManagerを標準のCompoundEditにします。
      int getLimit()
      このUndoManagerが保持する編集結果の最大数を返します。
      String getRedoPresentationName()
      この編集結果の再実行可能な形式の説明を返します。
      String getUndoOrRedoPresentationName()
      getUndoPresentationNameまたはgetRedoPresentationNameを返す簡易メソッドです。
      String getUndoPresentationName()
      この編集結果の取消し可能な形式の説明を返します。
      void redo()
      編集結果を選択して再実行します。
      protected void redoTo​(UndoableEdit edit)
      次の編集結果のインデックスからeditまでのすべての変更を再実行し、それに合わせて次の編集結果のインデックスを更新します。
      void setLimit​(int l)
      このUndoManagerが保持する編集結果の最大数を設定します。
      String toString()
      このオブジェクトのプロパティを表示および識別する文字列を返します。
      protected void trimEdits​(int from, int to)
      指定された範囲内の編集結果を削除します。
      protected void trimForLimit()
      キューに入った編集結果の数を、次の編集結果のインデックスの中央のサイズ限度の範囲にまで減らします。
      void undo()
      編集結果を選択して取り消します。
      void undoableEditHappened​(UndoableEditEvent e)
      UndoableEditListenerメソッドです。
      void undoOrRedo()
      undoまたはredoのどちらか1つを呼び出す簡易メソッドです。
      protected void undoTo​(UndoableEdit edit)
      次の編集結果のインデックスからeditまでのすべての変更を取り消し、それに合わせて次の編集結果のインデックスを更新します。
    • コンストラクタの詳細

      • UndoManager

        public UndoManager()
        新しいUndoManagerを作成します。
    • メソッドの詳細

      • getLimit

        public int getLimit()
        このUndoManagerが保持する編集結果の最大数を返します。 0より小さい値は、編集結果の数に制限がないことを示します。
        戻り値:
        このUndoManagerが保持する編集結果の最大数
        関連項目:
        addEdit(javax.swing.undo.UndoableEdit), setLimit(int)
      • discardAllEdits

        public void discardAllEdits()
        undoマネージャを空にして、各編集結果の進行時にdieメッセージを送ります。
        関連項目:
        AbstractUndoableEdit.die()
      • trimForLimit

        protected void trimForLimit()
        キューに入った編集結果の数を、次の編集結果のインデックスの中央のサイズ限度の範囲にまで減らします。
      • trimEdits

        protected void trimEdits​(int from,
                                 int to)
        指定された範囲内の編集結果を削除します。 指定された範囲内のすべての編集結果(範囲の両端を含む。逆順)に対してdieが呼び出され、編集結果のリストからこれらの編集結果が削除されます。 from > toの場合は影響はありません。
        パラメータ:
        from - 削除する最小のインデックス
        to - 削除する最大のインデックス
      • setLimit

        public void setLimit​(int l)
        このUndoManagerが保持する編集結果の最大数を設定します。 0より小さい値は、編集結果の数に制限がないことを示します。 編集結果を破棄してこの制限数を減らす必要がある場合は、これらの編集結果に対して、追加時と逆の順序でdieを呼び出します。 デフォルトは100です。
        パラメータ:
        l - 新しい制限値
        例外:
        RuntimeException - このUndoManagerが実行中でない場合(endが呼び出された場合)
        関連項目:
        CompoundEdit.isInProgress(), end(), addEdit(javax.swing.undo.UndoableEdit), getLimit()
      • 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
      • undoOrRedo

        public void undoOrRedo()
                        throws CannotRedoException,
                               CannotUndoException
        undoまたはredoのどちらか1つを呼び出す簡易メソッドです。 取り消された編集結果がある場合(次の編集結果のインデックスが編集結果のリストの長さを表す値より小さくなっている場合)はredo、そうでない場合はundoを呼び出します。
        例外:
        CannotUndoException - いずれかの編集結果が次をスローする場合: CannotUndoException
        CannotRedoException - いずれかの編集結果が次をスローする場合: CannotRedoException
        関連項目:
        canUndoOrRedo(), getUndoOrRedoPresentationName()
      • canUndoOrRedo

        public boolean canUndoOrRedo()
        undoまたはredoを呼び出せる場合はtrueを返します。
        戻り値:
        canUndoOrRedoの呼出しが有効な場合はtrue
        関連項目:
        undoOrRedo()
      • undo

        public void undo()
                  throws CannotUndoException
        編集結果を選択して取り消します。 endが呼び出された場合、このメソッドはスーパー・クラスを呼び出します。それ以外の場合、このメソッドは、次の編集結果のインデックスから前回の重大な編集結果までのすべての編集結果に対してundoを呼び出します。その結果、次の編集結果のインデックスが更新されます。
        定義:
        undo、インタフェース: UndoableEdit
        オーバーライド:
        undo、クラス: CompoundEdit
        例外:
        CannotUndoException - 編集結果の中にCannotUndoExceptionをスローするものがある場合、または元に戻す編集結果が存在しない場合
        関連項目:
        CompoundEdit.end(), canUndo(), editToBeUndone()
      • canUndo

        public boolean canUndo()
        編集結果を取り消せる場合はtrueを返します。 endが呼び出された場合、このメソッドはスーパー・クラスから値を返します。 それ以外の場合で、元に戻す編集結果が存在する場合(editToBeUndonenull以外を返す場合)、このメソッドはtrueを返します。
        定義:
        canUndo、インタフェース: UndoableEdit
        オーバーライド:
        canUndo、クラス: CompoundEdit
        戻り値:
        元に戻す編集結果が存在する場合はtrue
        関連項目:
        CompoundEdit.canUndo(), editToBeUndone()
      • redo

        public void redo()
                  throws CannotRedoException
        編集結果を選択して再実行します。 endが呼び出された場合、このメソッドはスーパー・クラスを呼び出します。 それ以外の場合、このメソッドは、次の編集結果のインデックスから次の重大な編集結果までのすべての編集結果に対してredoを呼び出し、それに合わせて次の編集結果のインデックスを更新します。
        定義:
        redo、インタフェース: UndoableEdit
        オーバーライド:
        redo、クラス: CompoundEdit
        例外:
        CannotRedoException - 編集結果の中にCannotRedoExceptionをスローするものがある場合、または再実行する編集結果が存在しない場合
        関連項目:
        CompoundEdit.end(), canRedo(), editToBeRedone()
      • canRedo

        public boolean canRedo()
        編集結果を再実行できる場合はtrueを返します。 endが呼び出された場合、このメソッドはスーパー・クラスから値を返します。 それ以外の場合で、再実行する編集結果が存在する場合(editToBeRedonenull以外を返す場合)、このメソッドはtrueを返します。
        定義:
        canRedo、インタフェース: UndoableEdit
        オーバーライド:
        canRedo、クラス: CompoundEdit
        戻り値:
        再実行する編集結果が存在する場合はtrue
        関連項目:
        CompoundEdit.canRedo(), editToBeRedone()
      • addEdit

        public boolean addEdit​(UndoableEdit anEdit)
        可能であれば、このUndoManagerUndoableEditを追加します。 すると、次の編集結果のインデックスから編集リストの末尾までのすべての編集結果が削除されます。 endが呼び出された場合、編集結果は追加されず、falseが返されます。 endが呼び出されていない場合、このメソッドはtrueを返します。
        定義:
        addEdit、インタフェース: UndoableEdit
        オーバーライド:
        addEdit、クラス: CompoundEdit
        パラメータ:
        anEdit - 追加される編集結果
        戻り値:
        この編集結果にanEditを組み込むことができる場合はtrue
        関連項目:
        CompoundEdit.end(), CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)
      • end

        public void end()
        このUndoManagerを標準のCompoundEditにします。 この場合、これまでに取り消されたすべての編集結果が削除されます。
        オーバーライド:
        end、クラス: CompoundEdit
        関連項目:
        CompoundEdit.end()
      • getUndoOrRedoPresentationName

        public String getUndoOrRedoPresentationName()
        getUndoPresentationNameまたはgetRedoPresentationNameを返す簡易メソッドです。 次の編集結果のインデックスが編集結果リストのサイズと等しい場合、getUndoPresentationNameが返されます。そうでない場合、getRedoPresentationNameが返されます。
        戻り値:
        元に戻す、または再実行する名前
      • getUndoPresentationName

        public String getUndoPresentationName()
        この編集結果の取消し可能な形式の説明を返します。 endが呼び出された場合、このメソッドはスーパー・クラスを呼び出します。 それ以外の場合で、取り消す編集結果が存在する場合、このメソッドは、取り消される次の重大な編集結果から値を返します。 取り消す編集結果が存在せず、endが呼び出されていない場合、このメソッドはUIManagerプロパティ"AbstractUndoableEdit.undoText"から値を返します。
        定義:
        getUndoPresentationName、インタフェース: UndoableEdit
        オーバーライド:
        getUndoPresentationName、クラス: CompoundEdit
        戻り値:
        この編集結果の取消し可能な形式の説明
        関連項目:
        undo(), CompoundEdit.getUndoPresentationName()
      • getRedoPresentationName

        public String getRedoPresentationName()
        この編集結果の再実行可能な形式の説明を返します。 endが呼び出された場合、このメソッドはスーパー・クラスを呼び出します。 それ以外の場合で、再実行する編集結果が存在する場合、このメソッドは、再実行する次の重大な編集結果から値を返します。 再実行する編集結果が存在せず、endが呼び出されていない場合、このメソッドはUIManagerプロパティ"AbstractUndoableEdit.redoText"から値を返します。
        定義:
        getRedoPresentationName、インタフェース: UndoableEdit
        オーバーライド:
        getRedoPresentationName、クラス: CompoundEdit
        戻り値:
        この編集結果の再実行可能な形式の説明
        関連項目:
        redo(), CompoundEdit.getRedoPresentationName()
      • toString

        public String toString()
        このオブジェクトのプロパティを表示および識別する文字列を返します。
        オーバーライド:
        toString、クラス: CompoundEdit
        戻り値:
        このオブジェクトの文字列表現