JavaTM 2 Platform
Standard Ed. 6

javax.swing.text
類別 AbstractDocument

java.lang.Object
  繼承者 javax.swing.text.AbstractDocument
所有已實作的介面:
Serializable, Document
直接已知子類別:
DefaultStyledDocument, PlainDocument

public abstract class AbstractDocument
extends Object
implements Document, Serializable

文檔介面的實作,可作為實作各種文檔的基礎。在此級別上幾乎沒有策略,所以相應地增加了使用難度。

此類別實作了文檔的鎖定機制。它允許多個 reader 或一個 writer,並且在 writer 開始對文檔的另一次改變前,必須等到將以前的更改已通知該文檔的所有觀察者。使用 render 方法獲取和釋放讀取鎖定。通過改變文檔的那些方法來獲取寫入鎖定,並且在該方法調用期間保持鎖定。在產生改變的執行緒上完成通知,並且在通知期間該執行緒對檔案具有完全的讀取存取權限,不過在通知結束前其他 reader 無法讀取。該通知是一個 bean 事件通知,只有通知所有偵聽器之後才允許進一步的改變。

所有根據此類別創建子類別且與文本元件(該元件具有派生自 BasicTextUI 的外觀實作)一起使用的模型都可安全地進行非同步更新,因為如果該文檔的型別是 AbstractDocument,則對 View 層次結構的所有存取都是由 BasicTextUI 序列化的。鎖定機制假定獨立的執行緒僅從 DocumentListener 方法存取 View 層次結構,並且同一時間只有一個事件執行緒處於活動狀態。

如果需要共時支持,則有下列額外的含義。所有 DocumentListener 實作和所有 UndoListener 實作的程式碼路徑必須是執行緒安全的,並且如果要避免死鎖,則不能存取元件鎖定。在 JComponent 上執行 repaintrevalidate 方法是安全的。

AbstractDocument 在文檔的結尾模擬了一個隱含的分隔。除了其他作用,這一功能允許您在最後一個字元的後面定位插入符。因此,getLength 返回一個比 Content 的長度小的值。如果創建自己的 Content,一定要有一個額外的字元並且初始化它。有關此內容的範例,請參見 StringContent 和 GapContent。另一個含義是模擬該隱含結束字元的 Element 具有 endOffset == (getLength() + 1)。例如,在 DefaultStyledDocument 中,getParagraphElement(getLength()).getEndOffset() == getLength() + 1

警告:此類別的已序列化物件與以後的 Swing 版本不相容。當前的序列化支持適用於短期存儲或運行相同 Swing 版本的應用程序之間的 RMI。從 1.4 版本開始,已在 java.beans 套件中添加了支持所有 JavaBeansTM 長期存儲的功能。請參見 XMLEncoder


巢狀類別摘要
 class AbstractDocument.AbstractElement
          實作元素的抽象部分。
static interface AbstractDocument.AttributeContext
          一個介面,它用於允許 MutableAttributeSet 的實作使用可插入屬性壓縮技術。
 class AbstractDocument.BranchElement
          實作一個套件含其他元素的復合元素。
static interface AbstractDocument.Content
          描述可編輯的字元序列內容的介面。
 class AbstractDocument.DefaultDocumentEvent
          存儲修改文檔時發生的文檔更改。
static class AbstractDocument.ElementEdit
          一個 ElementChange 實作,可將其添加到文檔事件中。
 class AbstractDocument.LeafElement
          實作可直接表示某類別內容的元素。
 
欄位摘要
protected static String BAD_LOCATION
          指示位置錯誤的錯誤訊息。
static String BidiElementName
          用於保存單向操作的元素名。
static String ContentElementName
          用於表示內容的元素名
static String ElementNameAttribute
          用於指定元素名的屬性名。
protected  EventListenerList listenerList
          文檔的事件偵聽器列表。
static String ParagraphElementName
          用於表示段落的元素名
static String SectionElementName
          用於保存各節(行/段落)的元素名。
 
從介面 javax.swing.text.Document 繼承的欄位
StreamDescriptionProperty, TitleProperty
 
建構子摘要
protected AbstractDocument(AbstractDocument.Content data)
          建構具有某種指定內容存儲機制的新 AbstractDocument
protected AbstractDocument(AbstractDocument.Content data, AbstractDocument.AttributeContext context)
          建構具有某種指定內容存儲機制的新 AbstractDocument
 
方法摘要
 void addDocumentListener(DocumentListener listener)
          添加負責通知任何更改的文檔偵聽器。
 void addUndoableEditListener(UndoableEditListener listener)
          添加負責通知任何更改的撤消偵聽器。
protected  Element createBranchElement(Element parent, AttributeSet a)
          創建文檔分支元素,它可包含其他元素。
protected  Element createLeafElement(Element parent, AttributeSet a, int p0, int p1)
          創建文檔葉元素。
 Position createPosition(int offs)
          返回更改文檔時,將追蹤更改的位置。
 void dump(PrintStream out)
          提供診斷轉儲 (dump)。
protected  void fireChangedUpdate(DocumentEvent e)
          通知已註冊對獲得此事件型別通知感興趣的所有偵聽器。
protected  void fireInsertUpdate(DocumentEvent e)
          通知已註冊對獲得此事件型別通知感興趣的所有偵聽器。
protected  void fireRemoveUpdate(DocumentEvent e)
          通知已註冊對獲得此事件型別通知感興趣的所有偵聽器。
protected  void fireUndoableEditUpdate(UndoableEditEvent e)
          通知已註冊對獲得此事件型別通知感興趣的所有偵聽器。
 int getAsynchronousLoadPriority()
          獲得非同步載入優先級。
protected  AbstractDocument.AttributeContext getAttributeContext()
          獲取管理屬性的上下文。
 Element getBidiRootElement()
          返回此文檔雙向結構的根元素。
protected  AbstractDocument.Content getContent()
          獲得文檔的內容。
protected  Thread getCurrentWriter()
          獲取當前的寫入執行緒(如果有的話)。
abstract  Element getDefaultRootElement()
          返回視圖賴依存在的根元素,除非提供了向元素結構指派視圖的其他機制。
 DocumentFilter getDocumentFilter()
          返回負責進行插入/移除過濾的 DocumentFilter
 DocumentListener[] getDocumentListeners()
          返回在此文檔上註冊的所有文檔偵聽器的陣列。
 Dictionary<Object,Object> getDocumentProperties()
          支持管理屬性集。
 Position getEndPosition()
          返回表示文檔結尾的位置。
 int getLength()
          返回資料的長度。
<T extends EventListener>
T[]
getListeners(Class<T> listenerType)
          返回目前已在此文檔上註冊為 FooListener 的所有物件組成的陣列。
abstract  Element getParagraphElement(int pos)
          獲得包含給定位置的段落元素。
 Object getProperty(Object key)
          尋找屬性值的便捷方法。
 Element[] getRootElements()
          獲得已定義的所有根元素。
 Position getStartPosition()
          返回表示文檔開始的位置。
 String getText(int offset, int length)
          從文檔中獲得文本序列。
 void getText(int offset, int length, Segment txt)
          獲取文檔給定部分內包含的文本。
 UndoableEditListener[] getUndoableEditListeners()
          返回在此文檔上註冊的所有可撤消編輯偵聽器的陣列。
 void insertString(int offs, String str, AttributeSet a)
          將某些內容插入文檔。
protected  void insertUpdate(AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr)
          在文本插入後更新文檔結構。
protected  void postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
          隨文本的移除更新任何文檔結構。
 void putProperty(Object key, Object value)
          存儲屬性值的便捷方法。
 void readLock()
          獲取一個鎖定,以開始讀取文檔的某個狀態。
 void readUnlock()
          執行讀取解除鎖定。
 void remove(int offs, int len)
          從文檔中移除某些內容。
 void removeDocumentListener(DocumentListener listener)
          移除文檔偵聽器。
 void removeUndoableEditListener(UndoableEditListener listener)
          移除撤消偵聽器。
protected  void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
          隨文本的移除更新任何文檔結構。
 void render(Runnable r)
          如果模型支持被非同步更新,則此方法允許在共時情況下安全地呈現該模型。
 void replace(int offset, int length, String text, AttributeSet attrs)
          刪除從 offsetoffset + length 的文本區域,並用 text 替換它。
 void setAsynchronousLoadPriority(int p)
          設置非同步載入優先級。
 void setDocumentFilter(DocumentFilter filter)
          設置 DocumentFilter
 void setDocumentProperties(Dictionary<Object,Object> x)
          替換此文檔的文檔屬性字典。
protected  void writeLock()
          獲取一個鎖定,以開始改變此鎖定保護的文檔。
protected  void writeUnlock()
          釋放以前通過 writeLock 所獲得的寫入鎖定。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

listenerList

protected EventListenerList listenerList
文檔的事件偵聽器列表。


BAD_LOCATION

protected static final String BAD_LOCATION
指示位置錯誤的錯誤訊息。

另請參見:
常數欄位值

ParagraphElementName

public static final String ParagraphElementName
用於表示段落的元素名

另請參見:
常數欄位值

ContentElementName

public static final String ContentElementName
用於表示內容的元素名

另請參見:
常數欄位值

SectionElementName

public static final String SectionElementName
用於保存各節(行/段落)的元素名。

另請參見:
常數欄位值

BidiElementName

public static final String BidiElementName
用於保存單向操作的元素名。

另請參見:
常數欄位值

ElementNameAttribute

public static final String ElementNameAttribute
用於指定元素名的屬性名。

另請參見:
常數欄位值
建構子詳細資訊

AbstractDocument

protected AbstractDocument(AbstractDocument.Content data)
建構具有某種指定內容存儲機制的新 AbstractDocument

參數:
data - 內容

AbstractDocument

protected AbstractDocument(AbstractDocument.Content data,
                           AbstractDocument.AttributeContext context)
建構具有某種指定內容存儲機制的新 AbstractDocument

參數:
data - 內容
context - 屬性上下文
方法詳細資訊

getDocumentProperties

public Dictionary<Object,Object> getDocumentProperties()
支持管理屬性集。調用者可以使用 documentProperties 字典通過文檔範圍內起作用的屬性註釋文檔。

返回:
nullDictionary
另請參見:
setDocumentProperties(java.util.Dictionary)

setDocumentProperties

public void setDocumentProperties(Dictionary<Object,Object> x)
替換此文檔的文檔屬性字典。

參數:
x - 新字典
另請參見:
getDocumentProperties()

fireInsertUpdate

protected void fireInsertUpdate(DocumentEvent e)
通知已註冊對獲得此事件型別通知感興趣的所有偵聽器。使用傳入此觸發方法的參數延後 (lazily) 創建事件實例。

參數:
e - 事件
另請參見:
EventListenerList

fireChangedUpdate

protected void fireChangedUpdate(DocumentEvent e)
通知已註冊對獲得此事件型別通知感興趣的所有偵聽器。使用傳入此觸發方法的參數延後創建事件實例。

參數:
e - 事件
另請參見:
EventListenerList

fireRemoveUpdate

protected void fireRemoveUpdate(DocumentEvent e)
通知已註冊對獲得此事件型別通知感興趣的所有偵聽器。使用傳入此觸發方法的參數延後創建事件實例。

參數:
e - 事件
另請參見:
EventListenerList

fireUndoableEditUpdate

protected void fireUndoableEditUpdate(UndoableEditEvent e)
通知已註冊對獲得此事件型別通知感興趣的所有偵聽器。使用傳入此觸發方法的參數延後創建事件實例。

參數:
e - 事件
另請參見:
EventListenerList

getListeners

public <T extends EventListener> T[] getListeners(Class<T> listenerType)
返回目前已在此文檔上註冊為 FooListener 的所有物件組成的陣列。FooListener 是用 addFooListener 方法註冊的。

可以使用 class 文字值來指定 listenerType 參數,如 FooListener.class。例如,可以使用以下程式碼查詢文檔 d,以獲得該文檔的偵聽器:

DocumentListener[] mls = (DocumentListener[])(d.getListeners(DocumentListener.class));
如果不存在這樣的偵聽器,則此方法將返回一個空陣列。

參數:
listenerType - 所請求的偵聽器型別;此參數應該指定一個從 java.util.EventListener 繼承的介面
返回:
返回一個在此元件上作為 FooListener 註冊的所有物件的陣列,如果尚未添加這樣的偵聽器,則返回一個空陣列
拋出:
ClassCastException - 如果 listenerType 未指定一個實作 java.util.EventListener 的類別或介面
從以下版本開始:
1.3
另請參見:
getDocumentListeners(), getUndoableEditListeners()

getAsynchronousLoadPriority

public int getAsynchronousLoadPriority()
獲得非同步載入優先級。如果小於零,則不應非同步載入該文檔。

返回:
非同步載入優先級,如果不應非同步載入該文檔,則返回 -1

setAsynchronousLoadPriority

public void setAsynchronousLoadPriority(int p)
設置非同步載入優先級。

參數:
p - 新非同步載入優先級;小於零的值指示不應非同步載入該文檔

setDocumentFilter

public void setDocumentFilter(DocumentFilter filter)
設置 DocumentFilterDocumentFilter 被傳遞到 insertremove,以便有條件地允許文本的插入/刪除。null 值指示不進行過濾。

參數:
filter - 用於限制文本的 DocumentFilter
從以下版本開始:
1.4
另請參見:
getDocumentFilter()

getDocumentFilter

public DocumentFilter getDocumentFilter()
返回負責進行插入/移除過濾的 DocumentFilternull 返回值意味著不進行過濾。

返回:
the DocumentFilter
從以下版本開始:
1.4
另請參見:
setDocumentFilter(javax.swing.text.DocumentFilter)

render

public void render(Runnable r)
如果模型支持被非同步更新,則此方法允許在共時情況下安全地呈現該模型。給定的 runnable 的執行方式是,在 runnable 執行時安全讀取模型且不作任何更改。該 runnable 本身可能 進行任何改變。

實作此方法以便為 runnable 執行期間獲取一個讀取鎖定。在同一時間,可能有多個 runnable 在執行,並且當存在活動呈現的 runnable 時將會阻塞所有 writer。如果該 runnable 拋出異常,則將安全地釋放其鎖定。對於從不退出的 runnable 沒有保護,在其生命週期中會有效地保持文檔的鎖定。

如果給定的 runnable 試圖在此實作中對文檔進行任何改變,則會發生死鎖。沒有為每個呈現執行緒進行追蹤以便允許檢測此種情況的機制,但是子類別可以通過額外的開銷對呈現執行緒進行追蹤,並在死鎖時拋出錯誤。

雖然大多數 Swing 方法不是執行緒安全的,但此方法是執行緒安全的。有關更多資訊,請參閱 How to Use Threads

指定者:
介面 Document 中的 render
參數:
r - 要執行的渲染器

getLength

public int getLength()
返回資料的長度。這是表示使用者資料的內容字元數。

指定者:
介面 Document 中的 getLength
返回:
長度,該值 >= 0
另請參見:
Document.getLength()

addDocumentListener

public void addDocumentListener(DocumentListener listener)
添加負責通知任何更改的文檔偵聽器。

指定者:
介面 Document 中的 addDocumentListener
參數:
listener - 要添加的 DocumentListener
另請參見:
Document.addDocumentListener(javax.swing.event.DocumentListener)

removeDocumentListener

public void removeDocumentListener(DocumentListener listener)
移除文檔偵聽器。

指定者:
介面 Document 中的 removeDocumentListener
參數:
listener - 要移除的 DocumentListener
另請參見:
Document.removeDocumentListener(javax.swing.event.DocumentListener)

getDocumentListeners

public DocumentListener[] getDocumentListeners()
返回在此文檔上註冊的所有文檔偵聽器的陣列。

返回:
此文檔的所有 DocumentListener,如果當前沒有註冊的文檔偵聽器,則返回一個空陣列
從以下版本開始:
1.4
另請參見:
addDocumentListener(javax.swing.event.DocumentListener), removeDocumentListener(javax.swing.event.DocumentListener)

addUndoableEditListener

public void addUndoableEditListener(UndoableEditListener listener)
添加負責通知任何更改的撤消偵聽器。在 UndoableEdit 上執行撤消/重複操作將觸發適當的 DocumentEvent,以讓視圖與模型保持同步。

指定者:
介面 Document 中的 addUndoableEditListener
參數:
listener - 要添加的 UndoableEditListener
另請參見:
Document.addUndoableEditListener(javax.swing.event.UndoableEditListener)

removeUndoableEditListener

public void removeUndoableEditListener(UndoableEditListener listener)
移除撤消偵聽器。

指定者:
介面 Document 中的 removeUndoableEditListener
參數:
listener - 要移除的 UndoableEditListener
另請參見:
Document.removeDocumentListener(javax.swing.event.DocumentListener)

getUndoableEditListeners

public UndoableEditListener[] getUndoableEditListeners()
返回在此文檔上註冊的所有可撤消編輯偵聽器的陣列。

返回:
此文檔的所有 UndoableEditListener,如果當前沒有註冊的可撤消編輯偵聽器,則返回一個空陣列。
從以下版本開始:
1.4
另請參見:
addUndoableEditListener(javax.swing.event.UndoableEditListener), removeUndoableEditListener(javax.swing.event.UndoableEditListener)

getProperty

public final Object getProperty(Object key)
尋找屬性值的便捷方法。它等效於:
 getDocumentProperties().get(key);
 

指定者:
介面 Document 中的 getProperty
參數:
key - 非 null 的屬性鍵
返回:
此屬性的值,或者為 null
另請參見:
getDocumentProperties()

putProperty

public final void putProperty(Object key,
                              Object value)
存儲屬性值的便捷方法。它等效於:
 getDocumentProperties().put(key, value);
 
如果 valuenull,則此方法將移除該屬性。

指定者:
介面 Document 中的 putProperty
參數:
key - 非 null 的鍵
value - 屬性值
另請參見:
getDocumentProperties()

remove

public void remove(int offs,
                   int len)
            throws BadLocationException
從文檔中移除某些內容。移除內容會導致在進行實際更改時保持寫入鎖定。將會把更改通知調用此方法的執行緒上的觀察者。

雖然大多數 Swing 方法不是執行緒安全的,但此方法是執行緒安全的。有關更多資訊,請參閱 How to Use Threads

指定者:
介面 Document 中的 remove
參數:
offs - 起始偏移量,該值 >= 0
len - 要移除的字元數,該值 >= 0
拋出:
BadLocationException - 給定的移除位置不是文檔內的有效位置
另請參見:
Document.remove(int, int)

replace

public void replace(int offset,
                    int length,
                    String text,
                    AttributeSet attrs)
             throws BadLocationException
刪除從 offsetoffset + length 的文本區域,並用 text 替換它。由實作決定如何實作該替換,某些實作可能將該替換當作兩個不同的操作:一次移除,後跟一次插入,其他實作可能將該替換當作一個原子操作。

參數:
offset - 子元素的索引
length - 要刪除的文本長度,可能為 0,指示不刪除任何內容
text - 要插入的文本,null 指示不插入文本
attrs - AttributeSet 指示所插入文本的屬性,null 是合法值,通常作為空 attributeset 對待,但是具體的解釋由子類別負責
拋出:
BadLocationException - 給定的位置不是文檔內的有效位置
從以下版本開始:
1.4

insertString

public void insertString(int offs,
                         String str,
                         AttributeSet a)
                  throws BadLocationException
將某些內容插入文檔。插入內容會導致在實際發生改變時存儲寫鎖定,接著會向執行緒上抓取該寫入鎖定的觀察者發出通知。

雖然大多數 Swing 方法不是執行緒安全的,但此方法是執行緒安全的。有關更多資訊,請參閱 How to Use Threads

指定者:
介面 Document 中的 insertString
參數:
offs - 起始偏移量,該值 >= 0
str - 要插入的字元串;null/空字元串不執行任何操作
a - 插入內容的屬性
拋出:
BadLocationException - 如果給定的插入位置不是文檔中的有效位置
另請參見:
Document.insertString(int, java.lang.String, javax.swing.text.AttributeSet)

getText

public String getText(int offset,
                      int length)
               throws BadLocationException
從文檔中獲得文本序列。

指定者:
介面 Document 中的 getText
參數:
offset - 起始偏移量,該值 >= 0
length - 要檢索的字元數,該值 >= 0
返回:
文本
拋出:
BadLocationException - 給定範圍內包括的位置不是文檔內的有效位置
另請參見:
Document.getText(int, int)

getText

public void getText(int offset,
                    int length,
                    Segment txt)
             throws BadLocationException
獲取文檔給定部分內包含的文本。

如果 txt 參數的 partialReturn 屬性為 false,Segment 中返回的資料將是請求的整個長度,根據資料存儲的方式可能是副本,也可能不是。如果 partialReturn 屬性為 true,則只能返回不需要創建副本即能返回的文本量。使用部分返回在需要掃瞄大部分文檔的情況下具有更好的效果。下面是使用部分返回存取整個文檔的範例:

   int nleft = doc.getDocumentLength();
   Segment text = new Segment();
   int offs = 0;
   text.setPartialReturn(true);   
   while (nleft > 0) {
       doc.getText(offs, nleft, text);
       // do something with text
       nleft -= text.count;
       offs += text.count;
   }
 

指定者:
介面 Document 中的 getText
參數:
offset - 起始偏移量,該值 >= 0
length - 要檢索的字元數,該值 >= 0
txt - 所檢索到的文本被放入的 Segment 物件
拋出:
BadLocationException - 給定範圍內包括的位置不是文檔內的有效位置

createPosition

public Position createPosition(int offs)
                        throws BadLocationException
返回更改文檔時,將追蹤更改的位置。

雖然大多數 Swing 方法不是執行緒安全的,但此方法是執行緒安全的。有關更多資訊,請參閱 How to Use Threads

指定者:
介面 Document 中的 createPosition
參數:
offs - 模型中的位置,該值 >= 0
返回:
位置
拋出:
BadLocationException - 如果給定的位置不表示關聯文檔內的有效位置
另請參見:
Document.createPosition(int)

getStartPosition

public final Position getStartPosition()
返回表示文檔開始的位置。可對返回的位置進行計數以便追蹤更改,也可以讓其保留在文檔起始位置。

指定者:
介面 Document 中的 getStartPosition
返回:
位置

getEndPosition

public final Position getEndPosition()
返回表示文檔結尾的位置。可對返回的位置進行計數以便追蹤更改,也可以讓其保留在文檔結束位置。

指定者:
介面 Document 中的 getEndPosition
返回:
位置

getRootElements

public Element[] getRootElements()
獲得已定義的所有根元素。通常只有一個根元素,所以預設實作將返回預設的根元素。

指定者:
介面 Document 中的 getRootElements
返回:
根元素

getDefaultRootElement

public abstract Element getDefaultRootElement()
返回視圖賴依存在的根元素,除非提供了向元素結構指派視圖的其他機制。

指定者:
介面 Document 中的 getDefaultRootElement
返回:
根元素
另請參見:
Document.getDefaultRootElement()

getBidiRootElement

public Element getBidiRootElement()
返回此文檔雙向結構的根元素。其子級表示以給定的 Unicode 雙向層次進行字元操作。


getParagraphElement

public abstract Element getParagraphElement(int pos)
獲得包含給定位置的段落元素。子類別必須為其自身定義準確的段落組成。但是應該要記住,一個段落至少應該是在其上可運行 Unicode 雙向演算法的文本單元。

參數:
pos - 起始偏移量,該值 >= 0
返回:
元素

getAttributeContext

protected final AbstractDocument.AttributeContext getAttributeContext()
獲取管理屬性的上下文。此方法高效地建立了用於壓縮 AttributeSet 資訊的策略。

返回:
上下文

insertUpdate

protected void insertUpdate(AbstractDocument.DefaultDocumentEvent chng,
                            AttributeSet attr)
在文本插入後更新文檔結構。這將在寫鎖定內發生。如果此類別的子類別重新實作此方法,則還應該委託給父級類別。

參數:
chng - 更改的描述
attr - 更改的屬性

removeUpdate

protected void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
隨文本的移除更新任何文檔結構。從 Content 中實際移除文本前調用此方法。這將在寫鎖定內發生。如果此類別的子類別重新實作此方法,則還應該委託給父級類別。

參數:
chng - 更改的描述

postRemoveUpdate

protected void postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
隨文本的移除更新任何文檔結構。從 Content 中移除文本後調用此方法。這將在寫鎖定內發生。如果此類別的子類別重新實作此方法,則還應該委託給父級類別。

參數:
chng - 更改的描述

dump

public void dump(PrintStream out)
提供診斷轉儲 (dump)。

參數:
out - 輸出串流

getContent

protected final AbstractDocument.Content getContent()
獲得文檔的內容。

返回:
內容

createLeafElement

protected Element createLeafElement(Element parent,
                                    AttributeSet a,
                                    int p0,
                                    int p1)
創建文檔葉元素。使用此操作來創建那些表示文檔結構的元素。因為此實作分別保存結構和內容,所以擴展內容時元素會自動增加,然後會拆分現有的元素。文檔本身決定如何產生元素,從而在使用的元素型別上提供了靈活性。

參數:
parent - 父元素
a - 元素的屬性
p0 - 範圍的開始,該值 >= 0
p1 - 範圍的結尾,該值 >= p0
返回:
新元素

createBranchElement

protected Element createBranchElement(Element parent,
                                      AttributeSet a)
創建文檔分支元素,它可包含其他元素。

參數:
parent - 父元素
a - 屬性
返回:
元素

getCurrentWriter

protected final Thread getCurrentWriter()
獲取當前的寫入執行緒(如果有的話)。這可用於區分被調用的方法是否為現有修改的一部分,或者是否需要獲得鎖定並開始新事務。

返回:
正在修改文檔的執行緒,如果沒有正在進行修改,則返回 null

writeLock

protected final void writeLock()
獲取一個鎖定,以開始改變此鎖定保護的文檔。為了獲得鎖定,不能有正在進行的寫入、更改通知或讀取。另外,只要某個執行緒不嘗試從文檔通知內獲得其他 writeLock,就允許它獲得多個 writeLock。嘗試從 DocumentListener 通知內獲得 writeLock 將導致 IllegalStateException。每個執行緒可獲得多個 writeLock 的功能允許子類別獲得一個 writeLock、執行多個操作,然後釋放該鎖定。

writeLock 的調用必須與對 writeUnlock 的調用對稱,否則 Document 將被保持在鎖定狀態,從而無法進行讀取或寫入。

拋出:
IllegalStateException - 如果嘗試非法鎖定。如果正確實作了文檔,則僅在文檔偵聽器嘗試改變該文檔時才出現此異常。此情況違反了 bean 事件模型,此模型中不保證傳遞順序,在允許進一步改變前應通知所有偵聽器。

writeUnlock

protected final void writeUnlock()
釋放以前通過 writeLock 所獲得的寫入鎖定。將鎖定計數減一後,如果沒有其他未解鎖的鎖定,則允許新的 writer 或多個 reader 執行操作。

另請參見:
writeLock()

readLock

public final void readLock()
獲取一個鎖定,以開始讀取文檔的某個狀態。同時可以有多個 reader。完成對偵聽器的更改通知前,寫入鎖定會阻塞各個 reader。使用此方法應該非常小心,以避免對文檔的無意破壞。此方法應該始終與 readUnlock 保持對稱。

另請參見:
readUnlock()

readUnlock

public final void readUnlock()
執行讀取解除鎖定。該操作通知某個 reader 已完成操作。如果沒有其他 reader,則又可以開始寫入。此方法應該與 readLock 保持對稱,並且應該在最後的語句中出現,這樣才能保證對稱性。下面是一個範例:

     readLock();
     try {
        // do something
     } finally {
         readUnlock();
     }
 

另請參見:
readLock()

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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