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