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
を参照してください。
edits
RedoName, 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, lastEdit
replaceEdit
public 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
- いずれかの編集結果が次をスローする場合: CannotUndoException
protected void redoTo(UndoableEdit edit) throws CannotRedoException
edit
までのすべての変更を再実行し、それに合わせて次の編集結果のインデックスを更新します。CannotRedoException
- いずれかの編集結果が次をスローする場合: CannotRedoException
public void undoOrRedo() throws CannotRedoException, CannotUndoException
undo
または redo
のどちらか 1 つを呼び出す簡易メソッドです。取り消された編集結果がある場合 (次の編集結果のインデックスが編集結果のリストの長さを表す値より小さくなっている場合) は redo
、そうでない場合は undo
を呼び出します。CannotUndoException
- いずれかの編集結果が次をスローする場合: CannotUndoException
CannotRedoException
- いずれかの編集結果が次をスローする場合: CannotRedoException
canUndoOrRedo()
, getUndoOrRedoPresentationName()
public boolean canUndoOrRedo()
undo
または redo
を呼び出せる場合は true を返します。canUndoOrRedo
の呼び出しが有効な場合は trueundoOrRedo()
public void undo() throws CannotUndoException
end
が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合、このメソッドは、次の編集結果のインデックスから前回の重大な編集結果までのすべての編集結果に対して undo
を呼び出します。その結果、次の編集結果のインデックスが更新されます。undo
、インタフェース: UndoableEdit
undo
、クラス: CompoundEdit
CannotUndoException
- 編集結果の中に CannotUndoException
をスローするものがある場合、または元に戻す編集結果が存在しない場合CompoundEdit.end()
, canUndo()
, editToBeUndone()
public boolean canUndo()
end
が呼び出された場合、このメソッドはスーパークラスから値を返します。それ以外の場合で、元に戻す編集結果が存在する場合 (editToBeUndone
が null
以外を返す場合)、このメソッドは true を返します。canUndo
、インタフェース: UndoableEdit
canUndo
、クラス: CompoundEdit
CompoundEdit.canUndo()
, editToBeUndone()
public void redo() throws CannotRedoException
end
が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合、このメソッドは、次の編集結果のインデックスから次の重大な編集結果までのすべての編集結果に対して redo
を呼び出し、それに合わせて次の編集結果のインデックスを更新します。redo
、インタフェース: UndoableEdit
redo
、クラス: CompoundEdit
CannotRedoException
- 編集結果の中に CannotRedoException
をスローするものがある場合、または再実行する編集結果が存在しない場合CompoundEdit.end()
, canRedo()
, editToBeRedone()
public boolean canRedo()
end
が呼び出された場合、このメソッドはスーパークラスから値を返します。それ以外の場合で、再実行する編集結果が存在する場合 (editToBeRedone
が null
以外を返す場合)、このメソッドは true を返します。canRedo
、インタフェース: UndoableEdit
canRedo
、クラス: CompoundEdit
CompoundEdit.canRedo()
, editToBeRedone()
public boolean addEdit(UndoableEdit anEdit)
UndoManager
に UndoableEdit
を追加します。すると、次の編集結果のインデックスから編集リストの末尾までのすべての編集結果が削除されます。end
が呼び出された場合、編集結果は追加されず、false
が返されます。end
が呼び出されていない場合、このメソッドは true
を返します。addEdit
、インタフェース: UndoableEdit
addEdit
、クラス: CompoundEdit
anEdit
- 追加される編集結果anEdit
を組み込むことができる場合は trueCompoundEdit.end()
, CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)
public void end()
UndoManager
を標準の CompoundEdit
にします。この場合、これまでに取り消されたすべての編集結果が削除されます。end
、クラス: CompoundEdit
CompoundEdit.end()
public String getUndoOrRedoPresentationName()
getUndoPresentationName
または getRedoPresentationName
を返す簡易メソッドです。次の編集結果のインデックスが編集結果リストのサイズと等しい場合、getUndoPresentationName
が返されます。そうでない場合、getRedoPresentationName
が返されます。public String getUndoPresentationName()
end
が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合で、取り消す編集結果が存在する場合、このメソッドは、取り消される次の重大な編集結果から値を返します。取り消す編集結果が存在せず、end
が呼び出されていない場合、このメソッドは UIManager
プロパティー "AbstractUndoableEdit.undoText" から値を返します。getUndoPresentationName
、インタフェース: UndoableEdit
getUndoPresentationName
、クラス: CompoundEdit
undo()
, CompoundEdit.getUndoPresentationName()
public String getRedoPresentationName()
end
が呼び出された場合、このメソッドはスーパークラスを呼び出します。それ以外の場合で、再実行する編集結果が存在する場合、このメソッドは、再実行する次の重大な編集結果から値を返します。再実行する編集結果が存在せず、end
が呼び出されていない場合、このメソッドは UIManager
プロパティー "AbstractUndoableEdit.redoText" から値を返します。getRedoPresentationName
、インタフェース: UndoableEdit
getRedoPresentationName
、クラス: CompoundEdit
redo()
, CompoundEdit.getRedoPresentationName()
public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener
メソッドです。このメソッドは、e.getEdit()
を使って addEdit
を呼び出します。undoableEditHappened
、インタフェース: UndoableEditListener
e
- 追加する UndoableEditEvent
が含まれている UndoableEditEvent
addEdit(javax.swing.undo.UndoableEdit)
public String toString()
toString
、クラス: CompoundEdit
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.