- すべての実装されたインタフェース:
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.CompoundEditで宣言されたフィールド
edits
クラス javax.swing.undo.AbstractUndoableEditで宣言されたフィールド
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
までのすべての変更を取り消し、それに合わせて次の編集結果のインデックスを更新します。クラス javax.swing.undo.CompoundEditで宣言されたメソッド
die, getPresentationName, isInProgress, isSignificant, lastEdit
クラス javax.swing.undo.AbstractUndoableEditで宣言されたメソッド
replaceEdit
-
コンストラクタの詳細
-
UndoManager
public UndoManager()新しいUndoManager
を作成します。
-
-
メソッドの詳細
-
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
- いずれかの編集結果が次をスローする場合:CannotUndoException
CannotRedoException
- いずれかの編集結果が次をスローする場合: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
- 戻り値:
- このオブジェクトの文字列表現
-