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 のように、D が追加された場合、次の編集結果のインデックスは 4 になります。undo を呼び出すと、D に対して undo が呼び出され、次の編集結果のインデックスが 3 になります (c を編集)。次の図を参照してください。
|
| 図 2 |
前回の重大な編集結果は A です。undo を再度呼び出すと、c、b、および A に対して、この順番で undo が呼び出され、次の編集結果のインデックスが 0 になります。次の図を参照してください。
|
| 図 3 |
redo を呼び出すと、次の編集結果のインデックスから次の重大な編集結果 (リストの末尾) までのすべての編集結果に対して redo が呼び出されます。先ほどの例の続きで、redo を呼び出した場合、A、b、および 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 に適しています。1.4 以降、すべての JavaBeansTM 用の長期間の格納サポートが java.beans パッケージに追加されています。XMLEncoder を参照してください。
editsRedoName, UndoName| コンストラクタと説明 |
|---|
UndoManager()
新しい
UndoManager を作成します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
boolean |
addEdit(UndoableEdit anEdit)
可能であれば、この
UndoManager に UndoableEdit を追加します。 |
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 までのすべての変更を取り消し、それに合わせて次の編集結果のインデックスを更新します。 |
die, getPresentationName, isInProgress, isSignificant, lastEditreplaceEditpublic int getLimit()
UndoManager が保持する編集結果の最大数を返します。0 より小さい値は、編集結果の数に制限がないことを示します。UndoManager が保持する編集結果の最大数addEdit(javax.swing.undo.UndoableEdit), setLimit(int)public void discardAllEdits()
die メッセージを送ります。protected void trimForLimit()
protected void trimEdits(int from,
int to)
die が呼び出され、編集結果のリストからこれらの編集結果が削除されます。from > to の場合は影響はありません。from - 削除する最小のインデックスto - 削除する最大のインデックスpublic void setLimit(int l)
UndoManager が保持する編集結果の最大数を設定します。0 より小さい値は、編集結果の数に制限がないことを示します。編集結果を破棄してこの制限数を減らす必要がある場合は、これらの編集結果に対して、追加時と逆の順序で die を呼び出します。デフォルトは 100 です。l - 新しい制限値RuntimeException - この UndoManager が実行中でない場合 (end が呼び出された場合)CompoundEdit.isInProgress(), end(), addEdit(javax.swing.undo.UndoableEdit), getLimit()protected UndoableEdit editToBeUndone()
undo が呼び出された場合に、元に戻す次の重大な編集結果を返します。このメソッドは、元に戻す編集結果がない場合は null を返します。protected UndoableEdit editToBeRedone()
redo が呼び出された場合に再実行する次の重大な編集結果を返します。このメソッドは、再実行する編集結果がない場合は null を返します。protected void undoTo(UndoableEdit edit) throws CannotUndoException
edit までのすべての変更を取り消し、それに合わせて次の編集結果のインデックスを更新します。CannotUndoException - いずれかの編集結果が次をスローする場合: CannotUndoExceptionprotected void redoTo(UndoableEdit edit) throws CannotRedoException
edit までのすべての変更を再実行し、それに合わせて次の編集結果のインデックスを更新します。CannotRedoException - いずれかの編集結果が次をスローする場合: CannotRedoExceptionpublic void undoOrRedo()
throws CannotRedoException,
CannotUndoException
undo または redo のどちらか 1 つを呼び出す簡易メソッドです。取り消された編集結果がある場合 (次の編集結果のインデックスが編集結果のリストの長さを表す値より小さくなっている場合) は redo、そうでない場合は undo を呼び出します。CannotUndoException - いずれかの編集結果が次をスローする場合: CannotUndoExceptionCannotRedoException - いずれかの編集結果が次をスローする場合: CannotRedoExceptioncanUndoOrRedo(), getUndoOrRedoPresentationName()public boolean canUndoOrRedo()
undo または redo を呼び出せる場合は true を返します。canUndoOrRedo の呼び出しが有効な場合は trueundoOrRedo()public void undo()
throws CannotUndoException
end が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合、このメソッドは、次の編集結果のインデックスから前回の重大な編集結果までのすべての編集結果に対して undo を呼び出します。その結果、次の編集結果のインデックスが更新されます。undo、インタフェース: UndoableEditundo、クラス: CompoundEditCannotUndoException - 編集結果の中に CannotUndoException をスローするものがある場合、または元に戻す編集結果が存在しない場合CompoundEdit.end(), canUndo(), editToBeUndone()public boolean canUndo()
end が呼び出された場合、このメソッドはスーパークラスから値を返します。それ以外の場合で、元に戻す編集結果が存在する場合 (editToBeUndone が null 以外を返す場合)、このメソッドは true を返します。canUndo、インタフェース: UndoableEditcanUndo、クラス: CompoundEditCompoundEdit.canUndo(), editToBeUndone()public void redo()
throws CannotRedoException
end が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合、このメソッドは、次の編集結果のインデックスから次の重大な編集結果までのすべての編集結果に対して redo を呼び出し、それに合わせて次の編集結果のインデックスを更新します。redo、インタフェース: UndoableEditredo、クラス: CompoundEditCannotRedoException - 編集結果の中に CannotRedoException をスローするものがある場合、または再実行する編集結果が存在しない場合CompoundEdit.end(), canRedo(), editToBeRedone()public boolean canRedo()
end が呼び出された場合、このメソッドはスーパークラスから値を返します。それ以外の場合で、再実行する編集結果が存在する場合 (editToBeRedone が null 以外を返す場合)、このメソッドは true を返します。canRedo、インタフェース: UndoableEditcanRedo、クラス: CompoundEditCompoundEdit.canRedo(), editToBeRedone()public boolean addEdit(UndoableEdit anEdit)
UndoManager に UndoableEdit を追加します。すると、次の編集結果のインデックスから編集リストの末尾までのすべての編集結果が削除されます。end が呼び出された場合、編集結果は追加されず、false が返されます。end が呼び出されていない場合、このメソッドは true を返します。addEdit、インタフェース: UndoableEditaddEdit、クラス: CompoundEditanEdit - 追加される編集結果anEdit を組み込むことができる場合は trueCompoundEdit.end(), CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)public void end()
UndoManager を標準の CompoundEdit にします。この場合、これまでに取り消されたすべての編集結果が削除されます。end、クラス: CompoundEditCompoundEdit.end()public String getUndoOrRedoPresentationName()
getUndoPresentationName または getRedoPresentationName を返す簡易メソッドです。次の編集結果のインデックスが編集結果リストのサイズと等しい場合、getUndoPresentationName が返されます。そうでない場合、getRedoPresentationName が返されます。public String getUndoPresentationName()
end が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合で、取り消す編集結果が存在する場合、このメソッドは、取り消される次の重大な編集結果から値を返します。取り消す編集結果が存在せず、end が呼び出されていない場合、このメソッドは UIManager プロパティー "AbstractUndoableEdit.undoText" から値を返します。getUndoPresentationName、インタフェース: UndoableEditgetUndoPresentationName、クラス: CompoundEditundo(), CompoundEdit.getUndoPresentationName()public String getRedoPresentationName()
end が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合で、再実行する編集結果が存在する場合、このメソッドは、再実行する次の重大な編集結果から値を返します。再実行する編集結果が存在せず、end が呼び出されていない場合、このメソッドは UIManager プロパティー "AbstractUndoableEdit.redoText" から値を返します。getRedoPresentationName、インタフェース: UndoableEditgetRedoPresentationName、クラス: CompoundEditredo(), CompoundEdit.getRedoPresentationName()public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener メソッドです。このメソッドは、e.getEdit() を使って addEdit を呼び出します。undoableEditHappened、インタフェース: UndoableEditListenere - 追加する UndoableEditEvent が含まれている UndoableEditEventaddEdit(javax.swing.undo.UndoableEdit)public String toString()
toString、クラス: CompoundEdit バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.