|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjavax.swing.undo.AbstractUndoableEdit
javax.swing.undo.CompoundEdit
javax.swing.undo.UndoManager
public class UndoManager
UndoManager 管理 UndoableEdit 列表,提供撤消或恢復適當編輯的方法。有兩個方法可以將編輯添加到 UndoManager。直接使用 addEdit 方法添加編輯,或將 UndoManager 添加到支持 UndoableEditListener 的 bean。下面的例子創建了一個 UndoManager 並將它作為 UndoableEditListener 添加到 JTextField:
UndoManager undoManager = new UndoManager(); JTextField tf = ...; tf.getDocument().addUndoableEditListener(undoManager);
UndoManager 維護編輯的有序列表以及該列表中下一個編輯的索引。下一個編輯的索引為當前編輯列表的大小,如果已經調用了 undo,則該索引對應於已撤消的最後一個有效編輯的索引。調用 undo 時,所有的編輯(從下一個編輯的索引到最後一個有效編輯)都將以相反的順序被撤消。例如,考慮由以下編輯組成的 UndoManager :A b c D。粗體大寫字母的編輯為有效編輯,斜體小寫字母的編輯為無效編輯。
|
| Figure 1 |
如 figure 1 中所示,如果剛剛添加了 D,則下一個編輯的索引為 4。調用 undo 導致在 D 上調用 undo 並將下一個編輯的索引設置為 3(編輯 c),如下圖所示。
|
| Figure 2 |
最後一個有效編輯為 A,所以調用 undo 會在 c、b、和A 上以該順序再次調用 undo,並將下一個編輯的索引設置為 0,如下圖所示。
|
| Figure 3 |
調用 redo 會導致在下一個編輯的索引和下一個有效編輯(或列表結尾位置)之間的所有編輯上調用 redo。繼續上一個例子,如果調用了 redo,則將依次在 A、b 和 c 上調用 redo。此外,下一個編輯的索引被設置為 3 (如 figure 2 中所示)。
將一個編輯添加到 UndoManager 會移除從下一個編輯的索引到列表結尾位置的所有編輯。繼續上一個例子,如果添加一個新的編輯 e,則從列表中移除編輯 D (在它上面調用 die 之後)。如果下一個編輯沒有合併(c.addEdit(e) 返回 true)或替換(e.replaceEdit(c) 返回 true)c,則將新的編輯添加到 c 的後面,如下圖所示。
|
| Figure 4 |
在 UndoManager 上調用了 end 後,父級類別行為將用於所有 UndoableEdit 方法。有關其行為的詳細資訊,請參閱 CompoundEdit。
不同於 Swing 的其他類別,此類別是執行緒安全的。
警告:此類別的序列化物件與以後的 Swing 版本不相容。當前序列化支持適用於短期存儲,或適用於在運行相同 Swing 版本的應用程序之間進行 RMI(Remote Method Invocation,遠端方法調用)。從 1.4 版本開始,已在 java.beans 套件中添加了支持所有 JavaBeansTM 長期存儲的功能。請參見 XMLEncoder。
| 欄位摘要 |
|---|
| 從類別 javax.swing.undo.CompoundEdit 繼承的欄位 |
|---|
edits |
| 從類別 javax.swing.undo.AbstractUndoableEdit 繼承的欄位 |
|---|
RedoName, UndoName |
| 建構子摘要 | |
|---|---|
UndoManager()
創建一個新的 UndoManager。 |
|
| 方法摘要 | |
|---|---|
boolean |
addEdit(UndoableEdit anEdit)
如果可能,將一個 UndoableEdit 添加到此 UndoManager。 |
boolean |
canRedo()
如果可以恢復編輯,則返回 true。 |
boolean |
canUndo()
如果可以撤消編輯,則返回 true。 |
boolean |
canUndoOrRedo()
如果可以調用 undo 或 redo,則返回 true。 |
void |
discardAllEdits()
清空撤消管理器,向進程中的每個編輯發送一個 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。 |
protected void |
undoTo(UndoableEdit edit)
撤消從下一個編輯的索引到 edit 的所有更改,適當地更新下一個編輯的索引。 |
| 從類別 javax.swing.undo.CompoundEdit 繼承的方法 |
|---|
die, getPresentationName, isInProgress, isSignificant, lastEdit |
| 從類別 javax.swing.undo.AbstractUndoableEdit 繼承的方法 |
|---|
replaceEdit |
| 從類別 java.lang.Object 繼承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| 建構子詳細資訊 |
|---|
public UndoManager()
UndoManager。
| 方法詳細資訊 |
|---|
public int getLimit()
UndoManager 保持的最大編輯數。小於 0 的值指示編輯數不受限制。
UndoManager 保持的最大編輯數addEdit(javax.swing.undo.UndoableEdit),
setLimit(int)public void discardAllEdits()
die 訊息。
AbstractUndoableEdit.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 的所有更改,適當地更新下一個編輯的索引。
CannotUndoException - 如果其中一個編輯拋出 CannotUndoException
CannotRedoException
public void undoOrRedo()
throws CannotRedoException,
CannotUndoException
undo 或 redo。如果已撤消了所有編輯(下一個編輯的索引小於編輯列表的長度),則此方法調用 redo,否則調用 undo。
CannotUndoException - 如果其中一個編輯拋出 CannotUndoException
CannotRedoException - 如果其中一個編輯拋出 CannotRedoExceptioncanUndoOrRedo(),
getUndoOrRedoPresentationName()public boolean canUndoOrRedo()
undo 或 redo,則返回 true。
canUndoOrRedo 有效,則返回 trueundoOrRedo()
public void undo()
throws CannotUndoException
end,則通過此方法調用父級類別,否則此方法對下一個編輯的索引和最後一個有效編輯之間的所有編輯調用 undo,適當地更新下一個編輯的索引。
UndoableEdit 中的 undoCompoundEdit 中的 undoCannotUndoException - 如果其中一個編輯拋出 CannotUndoException 或沒有要撤消的編輯CompoundEdit.end(),
canUndo(),
editToBeUndone()public boolean canUndo()
end,則此方法返回來自父級類別的值。否則,如果有要撤消的編輯(editToBeUndone 返回非 null),則此方法返回 true。
UndoableEdit 中的 canUndoCompoundEdit 中的 canUndoCompoundEdit.canUndo(),
editToBeUndone()
public void redo()
throws CannotRedoException
end,則此方法調用父級類別,否則此方法對下一個編輯的索引和下一個有效編輯之間的所有編輯調用 redo,適當地更新下一個編輯的索引。
UndoableEdit 中的 redoCompoundEdit 中的 redoCannotRedoException - 如果其中一個編輯拋出 CannotRedoException 或沒有要恢復的編輯CompoundEdit.end(),
canRedo(),
editToBeRedone()public boolean canRedo()
end,則此方法返回來自父級類別的值。否則,如果有要恢復的編輯(editToBeRedone 返回非 null),則此方法返回 true。
UndoableEdit 中的 canRedoCompoundEdit 中的 canRedoCompoundEdit.canRedo(),
editToBeRedone()public boolean addEdit(UndoableEdit anEdit)
UndoableEdit 添加到此 UndoManager。此方法移除從下一個編輯的索引到編輯列表結尾位置的所有編輯。如果已調用了 end,則不添加該編輯並返回 false。如果沒有調用 end,則此方法返回 true。
UndoableEdit 中的 addEditCompoundEdit 中的 addEditanEdit - 要添加的編輯
anEdit 合併到此編輯,則返回 trueCompoundEdit.end(),
CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)public void end()
UndoManager 轉換為標準 CompoundEdit。這將移除所有已撤消的編輯。
CompoundEdit 中的 endCompoundEdit.end()public String getUndoOrRedoPresentationName()
getUndoPresentationName 或 getRedoPresentationName。如果下一個編輯的索引等於編輯列表的大小,則返回 getUndoPresentationName,否則返回 getRedoPresentationName。
public String getUndoPresentationName()
end,則通過此方法調用父級類別。否則,如果有要撤消的編輯,則此方法返回下一個將要撤消的有效編輯的值。如果沒有要撤消的編輯且沒有調用 end,則此方法返回取自 UIManager 屬性「AbstractUndoableEdit.undoText」的值。
UndoableEdit 中的 getUndoPresentationNameCompoundEdit 中的 getUndoPresentationNameundo(),
CompoundEdit.getUndoPresentationName()public String getRedoPresentationName()
end ,則此方法調用到父級類別。否則,如果有要恢復的編輯,此方法返回下一個將要恢復的有效編輯的值。如果沒有要恢復的編輯且沒有調用 end,則此方法返回取自 UIManager 屬性「AbstractUndoableEdit.redoText」的值。
UndoableEdit 中的 getRedoPresentationNameCompoundEdit 中的 getRedoPresentationNameredo(),
CompoundEdit.getRedoPresentationName()public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener 方法。此方法使用 e.getEdit() 調用 addEdit。
UndoableEditListener 中的 undoableEditHappenede - 要從中添加 UndoableEditEvent 的 UndoableEditEventaddEdit(javax.swing.undo.UndoableEdit)public String toString()
CompoundEdit 中的 toString
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。