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以降、すべてのJavaBeans™用の長期間の格納サポートが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 - いずれかの編集結果が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、インタフェース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, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。