|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface Document
Document
是一個作為 swing 文本元件模型的文本容器。此介面的目標是為了滿足不同的文檔處理需要,從非常簡單的文檔(純文本 textfield)到非常複雜的文檔(例如,HTML 或 XML 文檔)。
內容
在最簡單的級別,文本可用一個線性的字元序列模型表示。為支持國際化,Swing 文本模型使用 unicode 字元。顯示在文本元件中的字元序列一般稱為元件的內容。
要參考序列中的位置,使用的是兩個字元之間的坐標。如下圖所示,文本文檔中位置可稱為一個位置或一個偏移量。位置是從零開始的。
此例中,如前圖所示,如果文檔的內容為序列 "The quick brown fox" ,"The" 之前的位置為 0,位於 "The" 之後、它後面的空白之前的位置為 3。序列 "The" 中的整個字元序列稱為一個範圍。
下列方法提供對組成內容的字元資料的存取。
結構
只將文本表示為一般的內容並不常見。更多的情況下,文本都通常具有與其關聯的某種結構。具體建構成哪種結構取決於特定的 Document 實作。它可以簡單到沒有結構(即簡單的文本欄位),也可以是類似下面的圖。
結構單位(即階層樹的節點)由 Element 介面參考。每個 Element 都可用一組屬性標記。這些屬性(名稱/值對)由 AttributeSet 介面定義。
下面的方法提供對文檔結構的存取。
可變
所有的文檔都需要能夠添加和移除簡單的文本。通常,通過鍵盤或鼠標動作添加和移除文本。插入和移除對文檔結構有何影響完全取決於文檔的實作。
下列方法與文檔內容的變化相關:
通知
Document
的改變必須傳送給相關的觀察者。更改通知遵守為 JavaBeans 指定的事件模型大綱。在 JavaBeans 事件模型中,一旦指派了一個事件通知,必須在事件源發生進一步的更改之前通知所有的偵聽器。此外,無法保證傳送的順序。
通知以兩個獨立的事件提供,DocumentEvent 和 UndoableEditEvent。如果通過 Document
的 api 對其進行改變,將對所有註冊的 DocumentListeners
發送一個 DocumentEvent
。如果 Document
實作支持撤消/重複功能,UndoableEditEvent
將發送到所有註冊的 UndoableEditListener
上。如果對可撤消的編輯進行撤消,應從 Document 觸發 DocumentEvent
以指示又進行了更改。但是這種情況下不應產生任何 UndoableEditEvent
,因為編輯實際上是更改的源,而不是通過其 api 對 Document
進行的改變。
上圖中假設左面顯示的元件改變了藍色矩形表示的文本物件。文檔通過對兩個元件視圖指派 DocumentEvent 進行回應,並向偵聽邏輯發送 UndoableEditEvent,以保留歷史緩衝區。
現在假定右面顯示的元件改變相同的文檔。同樣,文檔對兩個元件視圖指派 DocumentEvent 並對保留歷史緩衝區的偵聽邏輯發送 UndoableEditEvent。
如果歷史緩衝區因此回滾(即撤消上一個 UndoableEdit),將對兩個視圖發送 DocumentEvent,導致二者都反映出對文檔的撤消改動(即移除右面的元件的改動)。如果歷史緩衝區再次回滾另一個更改,將對兩個視圖發送另外的 DocumentEvent,導致它們反映出對文檔的撤消改動,即移除左面的元件的改動。
與觀察文檔的改動相關的方法有:
屬性
文檔實作通常具有在運行時與之關聯的某組屬性。兩個最常見的屬性是 StreamDescriptionProperty 和 TitleProperty,前者可描述 Document
的來源,後者可用於命名 Document
。與這些屬性相關的方法有:
有關 Document
類別的更多資訊,請參閱 The Swing Connection 以及更有針對性的文章 The Element Interface。
DocumentEvent
,
DocumentListener
,
UndoableEditEvent
,
UndoableEditListener
,
Element
,
Position
,
AttributeSet
欄位摘要 | |
---|---|
static String |
StreamDescriptionProperty
用於描述初始化文檔的串流的屬性名。 |
static String |
TitleProperty
文檔標題的屬性名(如果有)。 |
方法摘要 | |
---|---|
void |
addDocumentListener(DocumentListener listener)
註冊給定的觀察者以便開始接收文檔發生更改的通知。 |
void |
addUndoableEditListener(UndoableEditListener listener)
註冊給定的觀察者以便開始接收文檔發生不可撤消的編輯的通知。 |
Position |
createPosition(int offs)
此方法允許應用程序在字元內容序列中標記位置。 |
Element |
getDefaultRootElement()
返回視圖賴以存在的根元素,除非提供了向元素結構指定視圖的其他機制。 |
Position |
getEndPosition()
返回代表文檔結束處的位置。 |
int |
getLength()
返回文檔中當前內容的字元數。 |
Object |
getProperty(Object key)
獲得與文檔關聯的屬性。 |
Element[] |
getRootElements()
返回定義的所有根元素。 |
Position |
getStartPosition()
返回代表文檔起始處的位置。 |
String |
getText(int offset,
int length)
獲取文檔中給定部分包含的文本。 |
void |
getText(int offset,
int length,
Segment txt)
獲取文檔中給定部分包含的文本。 |
void |
insertString(int offset,
String str,
AttributeSet a)
插入內容字元串。 |
void |
putProperty(Object key,
Object value)
將屬性與文檔關聯。 |
void |
remove(int offs,
int len)
移除文檔的部分內容。 |
void |
removeDocumentListener(DocumentListener listener)
將給定的觀察者從通知列表中撤消註冊,這樣就不再接收改動更新。 |
void |
removeUndoableEditListener(UndoableEditListener listener)
將給定的觀察者從通知列表中撤消註冊,這樣就不再接收更新。 |
void |
render(Runnable r)
如果模型支持非同步更新,則允許在共時情況下安全呈現模型。 |
欄位詳細資訊 |
---|
static final String StreamDescriptionProperty
static final String TitleProperty
方法詳細資訊 |
---|
int getLength()
void addDocumentListener(DocumentListener listener)
listener
- 要註冊的觀察者removeDocumentListener(javax.swing.event.DocumentListener)
void removeDocumentListener(DocumentListener listener)
listener
- 要註冊的觀察者addDocumentListener(javax.swing.event.DocumentListener)
void addUndoableEditListener(UndoableEditListener listener)
listener
- 要註冊的觀察者UndoableEditEvent
void removeUndoableEditListener(UndoableEditListener listener)
listener
- 要註冊的觀察者UndoableEditEvent
Object getProperty(Object key)
key
- 非 null
屬性鍵
putProperty(Object, Object)
void putProperty(Object key, Object value)
StreamDescriptionProperty
和 TitleProperty
。也可以定義其他屬性,如 author。
key
- 非 null
屬性鍵value
- 屬性值getProperty(Object)
void remove(int offs, int len) throws BadLocationException
為確保共時情況下的合理行為,事件在改動發生之後指派。這意味著在指派移除通知之前,文檔已經更新並且由 createPosition
創建的任何標記已更改。對於移除的情況,移除範圍的結束折疊至範圍的開始,移除範圍內的任何標記都折疊至範圍的開始。
如果移除導致 Document 結構更改,產生的 DocumentEvent 中還將包含更改所涉及的插入和移除 Element 的細節。移除對結建構成的更改則具體取決於 Document 的實作。
如果 Document 支持撤消/重複,還將產生 UndoableEditEvent。
offs
- 起始位置的偏移量,該值 >= 0len
- 要移除的字元數,該值 >= 0
BadLocationException
- 移除範圍的有些部分不是文檔的有效部分。異常中的位置為遇到的第一個損壞位置。DocumentEvent
,
DocumentListener
,
UndoableEditEvent
,
UndoableEditListener
void insertString(int offset, String str, AttributeSet a) throws BadLocationException
如果插入導致 Document 結構更改,有關更改涉及的插入和移除的 Element 的細節將包含在產生的 DocumentEvent 中。作為對插入的回應,由 Document 的實作決定結構應如何更改。
如果 Document 支持撤消/重複,還將產生 UndoableEditEvent。
offset
- 要插入內容的偏移量,該值 >= 0。追蹤給定的位置或其後位置的更改的所有位置都將移動。str
- 要插入的字元串a
- 要與插入的內容關聯的屬性。如果沒有屬性,它可能為 null。
BadLocationException
- 給定插入位置不是文檔中的有效位置DocumentEvent
,
DocumentListener
,
UndoableEditEvent
,
UndoableEditListener
String getText(int offset, int length) throws BadLocationException
offset
- 文檔中代表所需文本起始位置的偏移量,該值 >= 0length
- 需要的字元串的長度,該值 >= 0
BadLocationException
- 給定範圍的某些部分不是文檔中的有效部分。異常中的位置為遇到的第一個損壞位置。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 someting with text
nleft -= text.count;
offs += text.count;
}
offset
- 文檔中代表所需文本起始位置的偏移量,該值 >= 0length
- 需要的字元串的長度,該值 >= 0txt
- 要在其中返回文本的 Segment 物件
BadLocationException
- 給定範圍的某些部分不是文檔中的有效部分。異常中的位置為遇到的第一個損壞位置。Position getStartPosition()
Position getEndPosition()
Position createPosition(int offs) throws BadLocationException
offs
- 文檔起始處的偏移量,該值 >= 0
BadLocationException
- 如果給定的位置不代表關聯文檔中的有效位置Element[] getRootElements()
通常只有一個文檔結構,但是此介面支持在文本資料上建構任意數的結構投影。文檔可以有多個根元素以支持多文檔結構。一些範例如下:
Element getDefaultRootElement()
void render(Runnable r)
r
- 用於呈現模型的 Runnable
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。