モジュール 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を参照してください。

  • フィールドのサマリー

    クラス javax.swing.undo.CompoundEditで宣言されたフィールド

    edits

    クラス javax.swing.undo.AbstractUndoableEditで宣言されたフィールド

    RedoName, UndoName
  • コンストラクタのサマリー

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

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

    クラス javax.swing.undo.CompoundEditで宣言されたメソッド

    die, getPresentationName, isInProgress, isSignificant, lastEdit

    クラス javax.swing.undo.AbstractUndoableEditで宣言されたメソッド

    replaceEdit

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • 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()
    • undoableEditHappened

      public void undoableEditHappened(UndoableEditEvent e)
      UndoableEditListenerメソッドです。 このメソッドは、e.getEdit()を使ってaddEditを呼び出します。
      定義:
      undoableEditHappened、インタフェース: UndoableEditListener
      パラメータ:
      e - 追加するUndoableEditEventが含まれているUndoableEditEvent
      関連項目:
      addEdit(javax.swing.undo.UndoableEdit)
    • toString

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