JTextComponent是swing文本組件的基類,Java程式設計師最熟悉的JEditorPane、JTextArea和JTextField文本控制項就是該類的子類。
基本介紹
- 中文名:JTextComponent
- 功能定義1:插入符對象
- 功能定義2:默認插入符
- 功能定義3:文本輸入
簡介,功能定義,
簡介
提供了其他額外靈活性服務,但不含可插入UI和bean支持特性,這兩項特性的支持源於其它swing文本組件的基類。
功能定義
JTextComponent為其子類提供了以下功能定義。
插入符對象
JTextComponent定義了插入符對象,插入符是swing文本組件中的可插入對象,可以通過它具體定位文本組件中的文檔內容的一個具體位置,是逐字操作文本組件內文本的基礎。並通過CaretListener的實現類來捕獲插入符位置和選擇的更改。程式設計師可以自定義插入符對象,否則UI將提供默認插入符對象。
默認插入符(DefaultCaret)對象可以在發生插入或移除操作時,會自動更新其位置(一般指“絕對位置”,即距離文檔開頭的絕對字元位置),該對象會計算出插入或移除的操作是否會導致其它UI組件的連鎖反應,例如:JScrollPane內的文本組件是否需要滾動。
在文本組件內的文檔發生插入或移除操作時,可以按以下策略具體控制插入符對象所在(所指)的位置:
(1)NEVER_UPDATE:無論文檔怎樣更新,插入符在文檔中都位於同一絕對位置,除非由於刪除使文檔長度小於當前插入符位置。這種情況下,插入符位置將被調整到文檔的結尾。使用此策略時,插入符不會試圖在滾動關聯的視圖時保持可見。
(2)ALWAYS_UPDATE:插入符始終跟蹤文檔更改。對於一般的更改,如果在插入符位置之前或當前位置插入,則增加它的位置,如果在當前位置之前刪除,則減小它的位置。對於撤消/重複更新,它總是移動到更新發生的位置。插入符總是試圖通過調用 adjustVisibility 方法保持可見。
(3)UPDATE_WHEN_ON_EDT:如果文檔更新在事件調度執行緒上執行,則與 ALWAYS_UPDATE 動作類似;如果文檔更新在其它執行緒上執行,則與NEVER_UPDATE 類似。
其中UPDATE_WHEN_ON_EDT為默認屬性。
命令
定義了文本組件提供許多可能用於操作組件的命令。這實質上是組件表示其功能的方式。這些都將根據swing Action接口使用TextAction實現來表示。文本組件支持的命令集合可以使用getActions()方法查找。這些操作可以綁定到由按鍵等激發的鍵事件上。
可以通過下面的代碼來遍歷所用的文本類組件提供的所有Action名稱。
JTextArea textComponent = new JTextArea();
Action[] actions = textComponent.getActions();
for(Action action:actions){
System.out.println(action.getValue("Name"));
}
文本輸入
文本組件支持靈活而且國際化的文本輸入,在使用keymap和輸入法框架的同時維護與AWT偵聽器模型的兼容性。通過Keymap讓應用程式將擊鍵綁定到操作上。為了允許keymap在整個多文本組件上共享,它們可以使用擴展TextAction的操作。TextAction可以確定哪個JTextComponent最近有或以前有過焦點,並因此成為該操作的執行者(在此情況下,傳送到該操作的ActionEvent不包含作為其源的目標文本組件)。
通過input method framework及其內部的文本輸入事件InputMethodEvent可以方便的監控組件內文本的變化。
模型/視圖拆分結構
文本組件實際上將表示模型、視圖和控制器的對象結合在一起。多個組件可以共享一個文檔,這個模型是由Document類定義的,它提供了文檔內容的存儲機制,也可以在編輯過程中跟蹤更改,方便擴展出更複雜的模型。在每次修改文檔時,都會傳送DocumentEvent對象給DocumentListener對象。
位置控制
提供確定視圖中文本位置的功能。確定此信息有兩個方法,modelToView(int) 和 viewToModel(java.awt.Point)。
撤消/重複支持
提供對編輯歷史機制的支持,以允許進行撤消/重複操作。默認情況下文本組件本身不提供歷史緩衝區,但確實提供可以與提供撤消/重複支持的歷史緩衝區的 UndoableEdit 記錄。該支持由 Document 模型提供,該模型允許用戶附加 UndoableEditListener 實現。