JavaTM Platform
Standard Ed. 6

javax.swing.undo
クラス UndoManager

java.lang.Object
  上位を拡張 javax.swing.undo.AbstractUndoableEdit
      上位を拡張 javax.swing.undo.CompoundEdit
          上位を拡張 javax.swing.undo.UndoManager
すべての実装されたインタフェース:
Serializable, EventListener, UndoableEditListener, UndoableEdit

public class UndoManager
extends CompoundEdit
implements UndoableEditListener

UndoManager は、UndoableEdit のリストを管理し、編集結果を選択してその内容を元に戻したり再実行したりできます。UndoManager に編集結果を追加する方法は 2 とおりあります。一つは addEdit メソッドを使って直接編集結果を追加する方法、もう一つは 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 のように、D が追加された場合、次の編集結果のインデックスは 4 になります。undo を呼び出すと、D に対して undo が呼び出され、次の編集結果のインデックスが 3 になります (c を編集)。次の図を参照してください。  

図 2

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

図 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

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

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

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


フィールドの概要
 
クラス javax.swing.undo.CompoundEdit から継承されたフィールド
edits
 
クラス javax.swing.undo.AbstractUndoableEdit から継承されたフィールド
RedoName, UndoName
 
コンストラクタの概要
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 までのすべての変更を取り消し、それに合わせて次の編集結果のインデックスを更新します。
 
クラス 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 が呼び出され、編集結果のリストからこれらの編集結果が削除されます。fromto より大きい場合は、何も行いません。

パラメータ:
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 までのすべての変更を取り消し、それに合わせて次の編集結果のインデックスを更新します。

例外:
CannotUndoException - 編集結果の中に O1:code タグだぶりCannotUndoException をスローするものがある場合

redoTo

protected void redoTo(UndoableEdit edit)
               throws CannotRedoException
次の編集結果のインデックスから edit までのすべての変更を再実行し、それに合わせて次の編集結果のインデックスを更新します。

例外:
CannotRedoException - 編集結果の中に O2:code タグだぶりCannotRedoException をスローするものがある場合

undoOrRedo

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

例外:
CannotUndoException - 編集結果の中に O1:code タグだぶりCannotUndoException をスローするものがある場合
CannotRedoException - 編集結果の中に O2:code タグだぶりCannotRedoException をスローするものがある場合
関連項目:
canUndoOrRedo(), getUndoOrRedoPresentationName()

canUndoOrRedo

public boolean canUndoOrRedo()
undo または redo を呼び出せる場合は true を返します。

戻り値:
canUndoOrRedo の呼び出しが有効な場合は true
関連項目:
undoOrRedo()

undo

public void undo()
          throws CannotUndoException
編集結果を選択して取り消します。end が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合、このメソッドは、次の編集結果のインデックスから前回の重大な編集結果までのすべての編集結果に対して undo を呼び出します。その結果、次の編集結果のインデックスが更新されます。

定義:
インタフェース UndoableEdit 内の undo
オーバーライド:
クラス CompoundEdit 内の undo
例外:
CannotUndoException - 編集結果の中に CannotUndoException をスローするものがある場合、または元に戻す編集結果が 存在しない場合
関連項目:
CompoundEdit.end(), canUndo(), editToBeUndone()

canUndo

public boolean canUndo()
編集結果を取り消せる場合は true を返します。end が呼び出された場合、このメソッドはスーパークラスから値を返します。それ以外の場合で、元に戻す編集結果が存在する場合 (editToBeUndonenull 以外を返す場合)、このメソッドは true を返します。

定義:
インタフェース UndoableEdit 内の canUndo
オーバーライド:
クラス CompoundEdit 内の canUndo
戻り値:
元に戻す編集結果が存在する場合は true
関連項目:
CompoundEdit.canUndo(), editToBeUndone()

redo

public void redo()
          throws CannotRedoException
編集結果を選択して再実行します。end が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合、このメソッドは、次の編集結果のインデックスから次の重大な編集結果までのすべての編集結果に対して redo を呼び出し、それに合わせて次の編集結果のインデックスを更新します。

定義:
インタフェース UndoableEdit 内の redo
オーバーライド:
クラス CompoundEdit 内の redo
例外:
CannotRedoException - 編集結果の中に CannotRedoException をスローするものがある場合、または再実行する編集結果が 存在しない場合
関連項目:
CompoundEdit.end(), canRedo(), editToBeRedone()

canRedo

public boolean canRedo()
編集結果を再実行できる場合は true を返します。end が呼び出された場合、このメソッドはスーパークラスから値を返します。それ以外の場合で、再実行する編集結果が存在する場合 (editToBeRedonenull 以外を返す場合)、このメソッドは true を返します。

定義:
インタフェース UndoableEdit 内の canRedo
オーバーライド:
クラス CompoundEdit 内の canRedo
戻り値:
再実行する編集結果が存在する場合は true
関連項目:
CompoundEdit.canRedo(), editToBeRedone()

addEdit

public boolean addEdit(UndoableEdit anEdit)
可能であれば、この UndoManagerUndoableEdit を追加します。すると、次の編集結果のインデックスから編集リストの末尾までのすべての編集結果が削除されます。end が呼び出された場合、編集結果は追加されず、false が返されます。end が呼び出されていない場合、このメソッドは true を返します。

定義:
インタフェース UndoableEdit 内の addEdit
オーバーライド:
クラス CompoundEdit 内の addEdit
パラメータ:
anEdit - 追加される編集結果
戻り値:
この編集結果に anEdit を 組み込むことができる場合は true
関連項目:
CompoundEdit.end(), CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)

end

public void end()
この UndoManager を標準の CompoundEdit にします。この場合、これまでに取り消されたすべての編集結果が削除されます。

オーバーライド:
クラス CompoundEdit 内の end
関連項目:
CompoundEdit.end()

getUndoOrRedoPresentationName

public String getUndoOrRedoPresentationName()
getUndoPresentationName または getRedoPresentationName を返す簡易メソッドです。次の編集結果のインデックスが編集結果リストのサイズと等しい場合、getUndoPresentationName が返されます。そうでない場合、getRedoPresentationName が返されます。

戻り値:
元に戻す、または再実行する名前

getUndoPresentationName

public String getUndoPresentationName()
この編集結果の取り消し可能な形式の説明を返します。end が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合で、取り消す編集結果が存在する場合、このメソッドは、取り消される次の重大な編集結果から値を返します。取り消す編集結果が存在せず、end が呼び出されていない場合、このメソッドは UIManager プロパティー "AbstractUndoableEdit.undoText" から値を返します。

定義:
インタフェース UndoableEdit 内の getUndoPresentationName
オーバーライド:
クラス CompoundEdit 内の getUndoPresentationName
戻り値:
この編集結果の取り消し可能な形式の説明
関連項目:
undo(), CompoundEdit.getUndoPresentationName()

getRedoPresentationName

public String getRedoPresentationName()
この編集結果の再実行可能な形式の説明を返します。end が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合で、再実行する編集結果が存在する場合、このメソッドは、再実行する次の重大な編集結果から値を返します。再実行する編集結果が存在せず、end が呼び出されていない場合、このメソッドは UIManager プロパティー "AbstractUndoableEdit.redoText" から値を返します。

定義:
インタフェース UndoableEdit 内の getRedoPresentationName
オーバーライド:
クラス CompoundEdit 内の getRedoPresentationName
戻り値:
この編集結果の再実行可能な形式の説明
関連項目:
redo(), CompoundEdit.getRedoPresentationName()

undoableEditHappened

public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener メソッドです。このメソッドは、e.getEdit() を使って addEdit を呼び出します。

定義:
インタフェース UndoableEditListener 内の undoableEditHappened
パラメータ:
e - 追加する UndoableEditEvent が含まれている UndoableEditEvent
関連項目:
addEdit(javax.swing.undo.UndoableEdit)

toString

public String toString()
このオブジェクトのプロパティーを表示および識別する文字列を返します。

オーバーライド:
クラス CompoundEdit 内の toString
戻り値:
このオブジェクトの文字列表現

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。