|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.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
- 如果其中一個編輯拋出 CannotRedoException
canUndoOrRedo()
,
getUndoOrRedoPresentationName()
public boolean canUndoOrRedo()
undo
或 redo
,則返回 true。
canUndoOrRedo
有效,則返回 trueundoOrRedo()
public void undo() throws CannotUndoException
end
,則通過此方法調用父級類別,否則此方法對下一個編輯的索引和最後一個有效編輯之間的所有編輯調用 undo
,適當地更新下一個編輯的索引。
UndoableEdit
中的 undo
CompoundEdit
中的 undo
CannotUndoException
- 如果其中一個編輯拋出 CannotUndoException
或沒有要撤消的編輯CompoundEdit.end()
,
canUndo()
,
editToBeUndone()
public boolean canUndo()
end
,則此方法返回來自父級類別的值。否則,如果有要撤消的編輯(editToBeUndone
返回非 null
),則此方法返回 true。
UndoableEdit
中的 canUndo
CompoundEdit
中的 canUndo
CompoundEdit.canUndo()
,
editToBeUndone()
public void redo() throws CannotRedoException
end
,則此方法調用父級類別,否則此方法對下一個編輯的索引和下一個有效編輯之間的所有編輯調用 redo
,適當地更新下一個編輯的索引。
UndoableEdit
中的 redo
CompoundEdit
中的 redo
CannotRedoException
- 如果其中一個編輯拋出 CannotRedoException
或沒有要恢復的編輯CompoundEdit.end()
,
canRedo()
,
editToBeRedone()
public boolean canRedo()
end
,則此方法返回來自父級類別的值。否則,如果有要恢復的編輯(editToBeRedone
返回非 null
),則此方法返回 true。
UndoableEdit
中的 canRedo
CompoundEdit
中的 canRedo
CompoundEdit.canRedo()
,
editToBeRedone()
public boolean addEdit(UndoableEdit anEdit)
UndoableEdit
添加到此 UndoManager
。此方法移除從下一個編輯的索引到編輯列表結尾位置的所有編輯。如果已調用了 end
,則不添加該編輯並返回 false
。如果沒有調用 end
,則此方法返回 true
。
UndoableEdit
中的 addEdit
CompoundEdit
中的 addEdit
anEdit
- 要添加的編輯
anEdit
合併到此編輯,則返回 trueCompoundEdit.end()
,
CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)
public void end()
UndoManager
轉換為標準 CompoundEdit
。這將移除所有已撤消的編輯。
CompoundEdit
中的 end
CompoundEdit.end()
public String getUndoOrRedoPresentationName()
getUndoPresentationName
或 getRedoPresentationName
。如果下一個編輯的索引等於編輯列表的大小,則返回 getUndoPresentationName
,否則返回 getRedoPresentationName
。
public String getUndoPresentationName()
end
,則通過此方法調用父級類別。否則,如果有要撤消的編輯,則此方法返回下一個將要撤消的有效編輯的值。如果沒有要撤消的編輯且沒有調用 end
,則此方法返回取自 UIManager
屬性「AbstractUndoableEdit.undoText」的值。
UndoableEdit
中的 getUndoPresentationName
CompoundEdit
中的 getUndoPresentationName
undo()
,
CompoundEdit.getUndoPresentationName()
public String getRedoPresentationName()
end
,則此方法調用到父級類別。否則,如果有要恢復的編輯,此方法返回下一個將要恢復的有效編輯的值。如果沒有要恢復的編輯且沒有調用 end
,則此方法返回取自 UIManager
屬性「AbstractUndoableEdit.redoText」的值。
UndoableEdit
中的 getRedoPresentationName
CompoundEdit
中的 getRedoPresentationName
redo()
,
CompoundEdit.getRedoPresentationName()
public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener
方法。此方法使用 e.getEdit()
調用 addEdit
。
UndoableEditListener
中的 undoableEditHappened
e
- 要從中添加 UndoableEditEvent
的 UndoableEditEvent
addEdit(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。