- すべての実装されたインタフェース:
- Serializable,- EventListener,- UndoableEditListener,- UndoableEdit
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を参照してください。 
- 
フィールドのサマリークラス javax.swing.undo.CompoundEditで宣言されたフィールドeditsクラス javax.swing.undo.AbstractUndoableEditで宣言されたフィールドRedoName, UndoName
- 
コンストラクタのサマリーコンストラクタ
- 
メソッドのサマリー修飾子と型メソッド説明booleanaddEdit(UndoableEdit anEdit) 可能であれば、このUndoManagerにUndoableEditを追加します。booleancanRedo()編集結果を再実行できる場合はtrueを返します。booleancanUndo()編集結果を取り消せる場合はtrueを返します。booleanundoまたはredoを呼び出せる場合はtrueを返します。voidundoマネージャを空にして、各編集結果の進行時にdieメッセージを送ります。protected UndoableEditredoが呼び出されたときにやり直す次の重要な編集を返します。protected UndoableEditundoが呼び出された場合に元に戻す次の重要な編集を返します。voidend()このUndoManagerを標準のCompoundEditにします。intgetLimit()このUndoManagerが保持する編集結果の最大数を返します。この編集結果の再実行可能な形式の説明を返します。getUndoPresentationNameまたはgetRedoPresentationNameを返す簡易メソッドです。この編集結果の取消し可能な形式の説明を返します。voidredo()編集結果を選択して再実行します。protected voidredoTo(UndoableEdit edit) 次の編集結果のインデックスからeditまでのすべての変更を再実行し、それに合わせて次の編集結果のインデックスを更新します。voidsetLimit(int l) このUndoManagerが保持する編集結果の最大数を設定します。toString()このオブジェクトのプロパティを表示および識別する文字列を返します。protected voidtrimEdits(int from, int to) 指定された範囲内の編集結果を削除します。protected voidキューに入った編集結果の数を、次の編集結果のインデックスの中央のサイズ限度の範囲にまで減らします。voidundo()編集結果を選択して取り消します。voidUndoableEditListenerメソッドです。voidundoまたはredoのどちらか1つを呼び出す簡易メソッドです。protected voidundoTo(UndoableEdit edit) 次の編集結果のインデックスからeditまでのすべての変更を取り消し、それに合わせて次の編集結果のインデックスを更新します。クラス javax.swing.undo.CompoundEditで宣言されたメソッドdie, getPresentationName, isInProgress, isSignificant, lastEditクラス javax.swing.undo.AbstractUndoableEditで宣言されたメソッドreplaceEdit
- 
コンストラクタの詳細- 
UndoManagerpublic UndoManager()新しいUndoManagerを作成します。
 
- 
- 
メソッドの詳細- 
getLimitpublic int getLimit()このUndoManagerが保持する編集結果の最大数を返します。 0より小さい値は、編集結果の数に制限がないことを示します。- 戻り値:
- このUndoManagerが保持する編集結果の最大数
- 関連項目:
 
- 
discardAllEditspublic void discardAllEdits()undoマネージャを空にして、各編集結果の進行時にdieメッセージを送ります。- 関連項目:
 
- 
trimForLimitprotected void trimForLimit()キューに入った編集結果の数を、次の編集結果のインデックスの中央のサイズ限度の範囲にまで減らします。
- 
trimEditsprotected void trimEdits(int from, int to) 指定された範囲内の編集結果を削除します。 指定された範囲内のすべての編集結果(範囲の両端を含む。逆順)に対してdieが呼び出され、編集結果のリストからこれらの編集結果が削除されます。from>toの場合は影響はありません。- パラメータ:
- from- 削除する最小のインデックス
- to- 削除する最大のインデックス
 
- 
setLimitpublic void setLimit(int l) このUndoManagerが保持する編集結果の最大数を設定します。 0より小さい値は、編集結果の数に制限がないことを示します。 編集結果を破棄してこの制限数を減らす必要がある場合は、これらの編集結果に対して、追加時と逆の順序でdieを呼び出します。 デフォルトは100です。- パラメータ:
- l- 新しい制限値
- 例外:
- RuntimeException- この- UndoManagerが実行中でない場合(- endが呼び出された場合)
- 関連項目:
 
- 
editToBeUndoneprotected UndoableEdit editToBeUndone()undoが呼び出された場合に元に戻す次の重要な編集を返します。 このメソッドは、元に戻す編集結果がない場合はnullを返します。- 戻り値:
- 元に戻す次の重大な編集結果
 
- 
editToBeRedoneprotected UndoableEdit editToBeRedone()redoが呼び出されたときにやり直す次の重要な編集を返します。 このメソッドは、再実行する編集結果がない場合はnullを返します。- 戻り値:
- 再実行する次の重大な編集結果
 
- 
undoToprotected void undoTo(UndoableEdit edit) throws CannotUndoException 次の編集結果のインデックスからeditまでのすべての変更を取り消し、それに合わせて次の編集結果のインデックスを更新します。- パラメータ:
- edit- 元に戻す編集
- 例外:
- CannotUndoException- いずれかの編集結果が- CannotUndoExceptionをスローする場合
 
- 
redoToprotected void redoTo(UndoableEdit edit) throws CannotRedoException 次の編集結果のインデックスからeditまでのすべての変更を再実行し、それに合わせて次の編集結果のインデックスを更新します。- パラメータ:
- edit- 編集をやり直す
- 例外:
- CannotRedoException- いずれかの編集結果が- CannotRedoExceptionをスローする場合
 
- 
undoOrRedopublic void undoOrRedo() throws CannotRedoException, CannotUndoExceptionundoまたはredoのどちらか1つを呼び出す簡易メソッドです。 取り消された編集結果がある場合(次の編集結果のインデックスが編集結果のリストの長さを表す値より小さくなっている場合)はredo、そうでない場合はundoを呼び出します。- 例外:
- CannotUndoException- いずれかの編集結果が- CannotUndoExceptionをスローする場合
- CannotRedoException- いずれかの編集結果が- CannotRedoExceptionをスローする場合
- 関連項目:
 
- 
canUndoOrRedopublic boolean canUndoOrRedo()undoまたはredoを呼び出せる場合はtrueを返します。- 戻り値:
- canUndoOrRedoの呼出しが有効な場合はtrue
- 関連項目:
 
- 
undopublic void undo() throws CannotUndoException編集結果を選択して取り消します。endが呼び出された場合、このメソッドはスーパー・クラスを呼び出します。それ以外の場合、このメソッドは、次の編集結果のインデックスから前回の重大な編集結果までのすべての編集結果に対してundoを呼び出します。その結果、次の編集結果のインデックスが更新されます。- 定義:
- undo、インタフェース- UndoableEdit
- オーバーライド:
- undo、クラス- CompoundEdit
- 例外:
- CannotUndoException- 編集結果の中に- CannotUndoExceptionをスローするものがある場合、または元に戻す編集結果が存在しない場合
- 関連項目:
 
- 
canUndopublic boolean canUndo()編集結果を取り消せる場合はtrueを返します。endが呼び出された場合、このメソッドはスーパー・クラスから値を返します。 それ以外の場合で、元に戻す編集結果が存在する場合(editToBeUndoneがnull以外を返す場合)、このメソッドはtrueを返します。- 定義:
- canUndo、インタフェース- UndoableEdit
- オーバーライド:
- canUndo、クラス- CompoundEdit
- 戻り値:
- 元に戻す編集結果が存在する場合はtrue
- 関連項目:
 
- 
redopublic void redo() throws CannotRedoException編集結果を選択して再実行します。endが呼び出された場合、このメソッドはスーパー・クラスを呼び出します。 それ以外の場合、このメソッドは、次の編集結果のインデックスから次の重大な編集結果までのすべての編集結果に対してredoを呼び出し、それに合わせて次の編集結果のインデックスを更新します。- 定義:
- redo、インタフェース- UndoableEdit
- オーバーライド:
- redo、クラス- CompoundEdit
- 例外:
- CannotRedoException- 編集結果の中に- CannotRedoExceptionをスローするものがある場合、または再実行する編集結果が存在しない場合
- 関連項目:
 
- 
canRedopublic boolean canRedo()編集結果を再実行できる場合はtrueを返します。endが呼び出された場合、このメソッドはスーパー・クラスから値を返します。 それ以外の場合で、再実行する編集結果が存在する場合(editToBeRedoneがnull以外を返す場合)、このメソッドはtrueを返します。- 定義:
- canRedo、インタフェース- UndoableEdit
- オーバーライド:
- canRedo、クラス- CompoundEdit
- 戻り値:
- 再実行する編集結果が存在する場合はtrue
- 関連項目:
 
- 
addEditpublic boolean addEdit(UndoableEdit anEdit) 可能であれば、このUndoManagerにUndoableEditを追加します。 すると、次の編集結果のインデックスから編集リストの末尾までのすべての編集結果が削除されます。endが呼び出された場合、編集結果は追加されず、falseが返されます。endが呼び出されていない場合、このメソッドはtrueを返します。- 定義:
- addEdit、インタフェース- UndoableEdit
- オーバーライド:
- addEdit、クラス- CompoundEdit
- パラメータ:
- anEdit- 追加される編集結果
- 戻り値:
- この編集結果にanEditを組み込むことができる場合はtrue
- 関連項目:
 
- 
endpublic void end()このUndoManagerを標準のCompoundEditにします。 この場合、これまでに取り消されたすべての編集結果が削除されます。- オーバーライド:
- end、クラス- CompoundEdit
- 関連項目:
 
- 
getUndoOrRedoPresentationNamepublic String getUndoOrRedoPresentationName()getUndoPresentationNameまたはgetRedoPresentationNameを返す簡易メソッドです。 次の編集結果のインデックスが編集結果リストのサイズと等しい場合、getUndoPresentationNameが返されます。そうでない場合、getRedoPresentationNameが返されます。- 戻り値:
- 元に戻す、または再実行する名前
 
- 
getUndoPresentationNamepublic String getUndoPresentationName()この編集結果の取消し可能な形式の説明を返します。endが呼び出された場合、このメソッドはスーパー・クラスを呼び出します。 それ以外の場合で、取り消す編集結果が存在する場合、このメソッドは、取り消される次の重大な編集結果から値を返します。 取り消す編集結果が存在せず、endが呼び出されていない場合、このメソッドはUIManagerプロパティ"AbstractUndoableEdit.undoText"から値を返します。- 定義:
- getUndoPresentationName、インタフェース- UndoableEdit
- オーバーライド:
- getUndoPresentationName、クラス- CompoundEdit
- 戻り値:
- この編集結果の取消し可能な形式の説明
- 関連項目:
 
- 
getRedoPresentationNamepublic String getRedoPresentationName()この編集結果の再実行可能な形式の説明を返します。endが呼び出された場合、このメソッドはスーパー・クラスを呼び出します。 それ以外の場合で、再実行する編集結果が存在する場合、このメソッドは、再実行する次の重大な編集結果から値を返します。 再実行する編集結果が存在せず、endが呼び出されていない場合、このメソッドはUIManagerプロパティ"AbstractUndoableEdit.redoText"から値を返します。- 定義:
- getRedoPresentationName、インタフェース- UndoableEdit
- オーバーライド:
- getRedoPresentationName、クラス- CompoundEdit
- 戻り値:
- この編集結果の再実行可能な形式の説明
- 関連項目:
 
- 
undoableEditHappenedpublic void undoableEditHappened(UndoableEditEvent e) UndoableEditListenerメソッドです。 このメソッドは、e.getEdit()を使ってaddEditを呼び出します。- 定義:
- undoableEditHappened、インタフェース- UndoableEditListener
- パラメータ:
- e- 追加する- UndoableEditEventが含まれている- UndoableEditEvent
- 関連項目:
 
- 
toStringpublic String toString()このオブジェクトのプロパティを表示および識別する文字列を返します。- オーバーライド:
- toString、クラス- CompoundEdit
- 戻り値:
- このオブジェクトの文字列表現
 
 
-