JavaTM 2 Platform
Standard Ed. 6

javax.swing.undo
類別 UndoManager

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 管理 UndoableEdit 列表,提供撤消或恢復適當編輯的方法。有兩個方法可以將編輯添加到 UndoManager。直接使用 addEdit 方法添加編輯,或將 UndoManager 添加到支持 UndoableEditListener 的 bean。下面的例子創建了一個 UndoManager 並將它作為 UndoableEditListener 添加到 JTextField

   UndoManager undoManager = new UndoManager();
   JTextField tf = ...;
   tf.getDocument().addUndoableEditListener(undoManager);
 

UndoManager 維護編輯的有序列表以及該列表中下一個編輯的索引。下一個編輯的索引為當前編輯列表的大小,如果已經調用了 undo,則該索引對應於已撤消的最後一個有效編輯的索引。調用 undo 時,所有的編輯(從下一個編輯的索引到最後一個有效編輯)都將以相反的順序被撤消。例如,考慮由以下編輯組成的 UndoManagerA b c D。粗體大寫字母的編輯為有效編輯,斜體小寫字母的編輯為無效編輯。

Figure 1

figure 1 中所示,如果剛剛添加了 D,則下一個編輯的索引為 4。調用 undo 導致在 D 上調用 undo 並將下一個編輯的索引設置為 3(編輯 c),如下圖所示。

Figure 2

最後一個有效編輯為 A,所以調用 undo 會在 cb、和A 上以該順序再次調用 undo,並將下一個編輯的索引設置為 0,如下圖所示。

Figure 3

調用 redo 會導致在下一個編輯的索引和下一個有效編輯(或列表結尾位置)之間的所有編輯上調用 redo。繼續上一個例子,如果調用了 redo,則將依次在 Abc 上調用 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()
          如果可以調用 undoredo,則返回 true。
 void discardAllEdits()
          清空撤消管理器,向進程中的每個編輯發送一個 die 訊息。
protected  UndoableEdit editToBeRedone()
          如果調用 redo,則返回下一個要恢復的有效編輯。
protected  UndoableEdit editToBeUndone()
          如果調用 undo,則返回下一個要撤消的有效編輯。
 void end()
          將此 UndoManager 轉換為標準 CompoundEdit
 int getLimit()
          返回此 UndoManager 保持的最大編輯數。
 String getRedoPresentationName()
          返回此編輯可恢復形式的描述。
 String getUndoOrRedoPresentationName()
          一個便捷方法,它返回 getUndoPresentationNamegetRedoPresentationName
 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()
          一個便捷方法,它調用 undoredo
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
 

建構子詳細資訊

UndoManager

public UndoManager()
創建一個新的 UndoManager

方法詳細資訊

getLimit

public int getLimit()
返回此 UndoManager 保持的最大編輯數。小於 0 的值指示編輯數不受限制。

返回:
UndoManager 保持的最大編輯數
另請參見:
addEdit(javax.swing.undo.UndoableEdit), setLimit(int)

discardAllEdits

public void discardAllEdits()
清空撤消管理器,向進程中的每個編輯發送一個 die 訊息。

另請參見:
AbstractUndoableEdit.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 的所有更改,適當地更新下一個編輯的索引。

拋出:
CannotUndoException - 如果其中一個編輯拋出 CannotUndoException

redoTo

protected void redoTo(UndoableEdit edit)
               throws CannotRedoException
恢復從下一個編輯的索引到 edit 的所有更改,適當地更新下一個編輯的索引。

拋出:
CannotUndoException - 如果其中一個編輯拋出 CannotUndoException
CannotRedoException

undoOrRedo

public void undoOrRedo()
                throws CannotRedoException,
                       CannotUndoException
一個便捷方法,它調用 undoredo。如果已撤消了所有編輯(下一個編輯的索引小於編輯列表的長度),則此方法調用 redo,否則調用 undo

拋出:
CannotUndoException - 如果其中一個編輯拋出 CannotUndoException
CannotRedoException - 如果其中一個編輯拋出 CannotRedoException
另請參見:
canUndoOrRedo(), getUndoOrRedoPresentationName()

canUndoOrRedo

public boolean canUndoOrRedo()
如果可以調用 undoredo,則返回 true。

返回:
如果調用 canUndoOrRedo 有效,則返回 true
另請參見:
undoOrRedo()

undo

public void undo()
          throws CannotUndoException
撤消適當的編輯。如果已調用了 end,則通過此方法調用父級類別,否則此方法對下一個編輯的索引和最後一個有效編輯之間的所有編輯調用 undo,適當地更新下一個編輯的索引。

指定者:
介面 UndoableEdit 中的 undo
覆寫:
類別 CompoundEdit 中的 undo
拋出:
CannotUndoException - 如果其中一個編輯拋出 CannotUndoException 或沒有要撤消的編輯
另請參見:
CompoundEdit.end(), canUndo(), editToBeUndone()

canUndo

public boolean canUndo()
如果可以撤消編輯,則返回 true。如果已調用了 end,則此方法返回來自父級類別的值。否則,如果有要撤消的編輯(editToBeUndone 返回非 null),則此方法返回 true。

指定者:
介面 UndoableEdit 中的 canUndo
覆寫:
類別 CompoundEdit 中的 canUndo
返回:
如果有要撤消的編輯,則返回 true
另請參見:
CompoundEdit.canUndo(), editToBeUndone()

redo

public void redo()
          throws CannotRedoException
恢復適當的編輯。如果已調用了 end,則此方法調用父級類別,否則此方法對下一個編輯的索引和下一個有效編輯之間的所有編輯調用 redo,適當地更新下一個編輯的索引。

指定者:
介面 UndoableEdit 中的 redo
覆寫:
類別 CompoundEdit 中的 redo
拋出:
CannotRedoException - 如果其中一個編輯拋出 CannotRedoException 或沒有要恢復的編輯
另請參見:
CompoundEdit.end(), canRedo(), editToBeRedone()

canRedo

public boolean canRedo()
如果可以恢復編輯,則返回 true。如果已調用了 end,則此方法返回來自父級類別的值。否則,如果有要恢復的編輯(editToBeRedone 返回非 null),則此方法返回 true。

指定者:
介面 UndoableEdit 中的 canRedo
覆寫:
類別 CompoundEdit 中的 canRedo
返回:
如果有要恢復的編輯,則返回 true
另請參見:
CompoundEdit.canRedo(), editToBeRedone()

addEdit

public boolean addEdit(UndoableEdit anEdit)
如果可能,將一個 UndoableEdit 添加到此 UndoManager。此方法移除從下一個編輯的索引到編輯列表結尾位置的所有編輯。如果已調用了 end,則不添加該編輯並返回 false。如果沒有調用 end,則此方法返回 true

指定者:
介面 UndoableEdit 中的 addEdit
覆寫:
類別 CompoundEdit 中的 addEdit
參數:
anEdit - 要添加的編輯
返回:
如果可以將 anEdit 合併到此編輯,則返回 true
另請參見:
CompoundEdit.end(), CompoundEdit.addEdit(javax.swing.undo.UndoableEdit)

end

public void end()
將此 UndoManager 轉換為標準 CompoundEdit。這將移除所有已撤消的編輯。

覆寫:
類別 CompoundEdit 中的 end
另請參見:
CompoundEdit.end()

getUndoOrRedoPresentationName

public String getUndoOrRedoPresentationName()
一個便捷方法,它返回 getUndoPresentationNamegetRedoPresentationName。如果下一個編輯的索引等於編輯列表的大小,則返回 getUndoPresentationName,否則返回 getRedoPresentationName

返回:
撤消或恢復的名稱

getUndoPresentationName

public String getUndoPresentationName()
返回此編輯可撤消形式的描述。如果已調用了 end,則通過此方法調用父級類別。否則,如果有要撤消的編輯,則此方法返回下一個將要撤消的有效編輯的值。如果沒有要撤消的編輯且沒有調用 end,則此方法返回取自 UIManager 屬性「AbstractUndoableEdit.undoText」的值。

指定者:
介面 UndoableEdit 中的 getUndoPresentationName
覆寫:
類別 CompoundEdit 中的 getUndoPresentationName
返回:
此編輯可撤消形式的描述
另請參見:
undo(), CompoundEdit.getUndoPresentationName()

getRedoPresentationName

public String getRedoPresentationName()
返回此編輯可恢復形式的描述。如果已調用了 end ,則此方法調用到父級類別。否則,如果有要恢復的編輯,此方法返回下一個將要恢復的有效編輯的值。如果沒有要恢復的編輯且沒有調用 end,則此方法返回取自 UIManager 屬性「AbstractUndoableEdit.redoText」的值。

指定者:
介面 UndoableEdit 中的 getRedoPresentationName
覆寫:
類別 CompoundEdit 中的 getRedoPresentationName
返回:
此編輯可恢復形式的描述
另請參見:
redo(), CompoundEdit.getRedoPresentationName()

undoableEditHappened

public void undoableEditHappened(UndoableEditEvent e)
一個 UndoableEditListener 方法。此方法使用 e.getEdit() 調用 addEdit

指定者:
介面 UndoableEditListener 中的 undoableEditHappened
參數:
e - 要從中添加 UndoableEditEventUndoableEditEvent
另請參見:
addEdit(javax.swing.undo.UndoableEdit)

toString

public String toString()
返回顯示和標識此物件屬性的字元串。

覆寫:
類別 CompoundEdit 中的 toString
返回:
此物件的 String 表示形式

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only