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(tm)用の長期間の格納サポートが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, 2014, Oracle and/or its affiliates. All rights reserved.