JavaTM 2 Platform
Standard Ed. 6

javax.swing.plaf.basic
類別 BasicTextUI

java.lang.Object
  繼承者 javax.swing.plaf.ComponentUI
      繼承者 javax.swing.plaf.TextUI
          繼承者 javax.swing.plaf.basic.BasicTextUI
所有已實作的介面:
ViewFactory
直接已知子類別:
BasicEditorPaneUI, BasicTextAreaUI, BasicTextFieldUI, DefaultTextUI

public abstract class BasicTextUI
extends TextUI
implements ViewFactory

此類別是文本元件外觀的基礎。它提供基本的編輯器視圖和控制器服務,在為 JTextComponent 的擴展類別創建外觀時非常有用。

大多數狀態作為綁定 (bound) 屬性保存在關聯的 JTextComponent 中,UI 為各種屬性安裝預設值。此預設值將為所有屬性安裝某些內容。但是,通常 LAF 實作所做的不止如此。LAF 一般至少會安裝鍵綁定。

如果與 JTextComponent 關聯的 DocumentAbstractDocument 的子類別,則此類別還將提供某些共時支持。在任一更改模型的執行緒與 Swing 事件執行緒(希望用來呈現、進行模型/視圖坐標轉換等)之間,對 View(或 View 層次結構)的存取都是序列化的。對根視圖的任何存取首先應該獲取一個 AbstractDocument 上的讀鎖 (read-lock),並在 finally 程式碼塊中釋放該鎖。

要定義的一個重要方法是 getPropertyPrefix() 方法,該方法作為從 UIManager 獲取預設值的鍵的基礎。字元串應該反映 TextUI(例如,TextField、TextArea 等)的型別,並且不帶名稱的特定 LAF 部分(例如,Metal、Motif 等)。

要建構模型的視圖,可以使用以下策略之一。

  1. 一種策略是簡單地重新定義 UI 中的 ViewFactory 介面。預設情況下,此 UI 本身充當 View 實作的處理器。這對於簡單處理器很有用。要做到這一點,需要重新實作 create(javax.swing.text.Element) 方法。
  2. 創建較複雜的文檔型別的常見策略是讓 EditorKit 實作返回一個處理器。因為 EditorKit 綁定了維護文檔型別所需的全部內容,所以處理器通常是它的一個重要部分,應該由 EditorKit 實作產生。

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


巢狀類別摘要
static class BasicTextUI.BasicCaret
           
static class BasicTextUI.BasicHighlighter
           
 
建構子摘要
BasicTextUI()
          創建新的 UI。
 
方法摘要
 View create(Element elem)
          創建元素的視圖。
 View create(Element elem, int p0, int p1)
          創建元素的視圖。
protected  Caret createCaret()
          創建用於插入符的物件。
protected  Highlighter createHighlighter()
          創建用於添加高亮顯示的物件。
protected  Keymap createKeymap()
          創建用於文本元件的 keymap,並在其中安裝必需的綁定。
 void damageRange(JTextComponent tc, int p0, int p1)
          促使重新繪製負責模型給定部分的那部分視圖。
 void damageRange(JTextComponent t, int p0, int p1, Position.Bias p0Bias, Position.Bias p1Bias)
          促使重新繪製負責模型給定部分的那部分視圖。
protected  JTextComponent getComponent()
          獲取與此 UI 實作關聯的文本元件。
 EditorKit getEditorKit(JTextComponent tc)
          獲取 UI 的 EditorKit。
protected  String getKeymapName()
          獲取預設情況下為此 UI 安裝或用於此 UI 的 keymap 的名稱。
 Dimension getMaximumSize(JComponent c)
          獲取編輯器元件的最大大小。
 Dimension getMinimumSize(JComponent c)
          獲取編輯器元件的最小大小。
 int getNextVisualPositionFrom(JTextComponent t, int pos, Position.Bias b, int direction, Position.Bias[] biasRet)
          提供確定下一個可以放置一個插入符的可見模型位置的方法。
 Dimension getPreferredSize(JComponent c)
          獲取編輯器元件的首選大小。
protected abstract  String getPropertyPrefix()
          獲取通過 UIManager 尋找屬性時用作鍵的名稱。
 View getRootView(JTextComponent tc)
          獲取分派了相關文本元件(即層次結構的根)的 View,可通過遍歷該視圖確定模型在空間中的表示形式。
 String getToolTipText(JTextComponent t, Point pt)
          返回在傳入位置上用作工具提示的字元串。
protected  Rectangle getVisibleEditorRect()
          獲取給出根 View 的分派。
protected  void installDefaults()
          初始化元件屬性,例如,字體、前景、背景、插入符顏色、選擇顏色、所選文本顏色、禁用文本顏色,以及邊框顏色。
protected  void installKeyboardActions()
           
protected  void installListeners()
          安裝 UI 的偵聽器。
 void installUI(JComponent c)
          安裝元件的 UI。
protected  void modelChanged()
          標誌模型更改。
 Rectangle modelToView(JTextComponent tc, int pos)
          將模型中的給定位置轉換成視圖坐標系統中的某一個位置。
 Rectangle modelToView(JTextComponent tc, int pos, Position.Bias bias)
          將模型中的給定位置轉換成視圖坐標系統中的某一個位置。
 void paint(Graphics g, JComponent c)
          繪製介面。
protected  void paintBackground(Graphics g)
          繪製視圖的背景。
protected  void paintSafely(Graphics g)
          安全地繪製介面,保證模型不會根據此執行緒的視圖發生更改。
protected  void propertyChange(PropertyChangeEvent evt)
          當關聯的 JTextComponent 上有一個綁定屬性更改時,此方法被調用。
protected  void setView(View v)
          設置視圖層次結構的當前根並調用 invalidate()。
protected  void uninstallDefaults()
          將尚未顯式覆寫的元件屬性設置為 null。
protected  void uninstallKeyboardActions()
           
protected  void uninstallListeners()
          卸載 UI 的偵聽器。
 void uninstallUI(JComponent c)
          卸載元件的 UI。
 void update(Graphics g, JComponent c)
          父級類別以無法控制的方式繪製背景(即有人可能希望將圖像平鋪在背景中)。
 int viewToModel(JTextComponent tc, Point pt)
          將視圖坐標系統中的給定位置轉換成模型中最有代表性的位置。
 int viewToModel(JTextComponent tc, Point pt, Position.Bias[] biasReturn)
          將視圖坐標系統中的給定位置轉換成模型中最有代表性的位置。
 
從類別 javax.swing.plaf.ComponentUI 繼承的方法
contains, createUI, getAccessibleChild, getAccessibleChildrenCount, getBaseline, getBaselineResizeBehavior
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

BasicTextUI

public BasicTextUI()
創建新的 UI。

方法詳細資訊

createCaret

protected Caret createCaret()
創建用於插入符的物件。預設情況下創建一個 BasicCaret 的實例。可以重新定義此方法,讓它提供實作 InputPosition 介面或 JCaret 子類別的一些其他內容。

返回:
插入符物件

createHighlighter

protected Highlighter createHighlighter()
創建用於添加高亮顯示的物件。預設情況下創建一個 BasicHighlighter 的實例。可以重新定義此方法,讓它提供實作 Highlighter 介面或 DefaultHighlighter 子類別的一些其他內容。

返回:
highlighter

getKeymapName

protected String getKeymapName()
獲取預設情況下為此 UI 安裝或用於此 UI 的 keymap 的名稱。實作此方法來創建基於類別名的名稱。該名稱是移除了包前綴的類別名。

返回:
名稱

createKeymap

protected Keymap createKeymap()
創建用於文本元件的 keymap,並在其中安裝必需的綁定。預設情況下,keymap 在此 TextUI 型別的所有實例之間共享。keymap 的名稱由 getKeymapName 方法定義。如果找不到 keymap,則使用 JTextComponent 的 DEFAULT_KEYMAP。

用於創建 keymap 的綁定集從 UIManager 獲取,方法是使用通過組合 getPropertyPrefix() 方法和字元串 .keyBindings 而形成的鍵。期望的型別為 JTextComponent.KeyBinding[]

返回:
keymap
另請參見:
getKeymapName(), JTextComponent

propertyChange

protected void propertyChange(PropertyChangeEvent evt)
當關聯的 JTextComponent 上有一個綁定屬性更改時,此方法被調用。此方法是一個鉤子 (hook),UI 實作可以更改它來反映 UI 顯示 JTextComponent 子類別的綁定屬性的方式。實作此方法並不執行任何操作。(即處理對 JTextComponent 中屬性的回應是在調用此方法之前)。 如果可編輯和/或已啟用狀態發生更改,則此實作更新文本元件的背景。

參數:
evt - 屬性更改事件

getPropertyPrefix

protected abstract String getPropertyPrefix()
獲取通過 UIManager 尋找屬性時用作鍵的名稱。它會作為所有標準文本屬性的前綴。

返回:
名稱

installDefaults

protected void installDefaults()
初始化元件屬性,例如,字體、前景、背景、插入符顏色、選擇顏色、所選文本顏色、禁用文本顏色,以及邊框顏色。僅當字體、前景和背景屬性的當前值為 null 或 UIResource 時才設置這些屬性,其他屬性在當前值為 null 時設置。

另請參見:
uninstallDefaults(), installUI(javax.swing.JComponent)

uninstallDefaults

protected void uninstallDefaults()
將尚未顯式覆寫的元件屬性設置為 null。如果某個屬性的當前值不是 UIResource,則視為被覆寫。

另請參見:
installDefaults(), uninstallUI(javax.swing.JComponent)

installListeners

protected void installListeners()
安裝 UI 的偵聽器。


uninstallListeners

protected void uninstallListeners()
卸載 UI 的偵聽器。


installKeyboardActions

protected void installKeyboardActions()

uninstallKeyboardActions

protected void uninstallKeyboardActions()

paintBackground

protected void paintBackground(Graphics g)
繪製視圖的背景。僅當關聯元件上的 isOpaque() 為 true 時才調用此方法。預設情況下繪製元件的背景色。

參數:
g - 圖形上下文

getComponent

protected final JTextComponent getComponent()
獲取與此 UI 實作關聯的文本元件。在安裝 UI 之前,此方法將一直為 null。

返回:
編輯器元件

modelChanged

protected void modelChanged()
標誌模型更改。只要模型更改就會調用此方法。實作此方法來重新建構視圖層次結構,從而表示關聯模型的預設根元素。


setView

protected final void setView(View v)
設置視圖層次結構的當前根並調用 invalidate()。如果存在子元件,則將其移除(即假定這些子元件來自嵌入視圖的元件)。

參數:
v - 根視圖

paintSafely

protected void paintSafely(Graphics g)
安全地繪製介面,保證模型不會根據此執行緒的視圖發生更改。此方法執行以下操作,從後往前呈現。
  1. 如果元件被標記為不透明,則以元件的當前背景色繪製背景。
  2. 繪製高亮顯示(如果有)。
  3. 繪製視圖層次結構。
  4. 繪製插入符。

參數:
g - 圖形上下文

installUI

public void installUI(JComponent c)
安裝元件的 UI。此方法執行以下操作。
  1. 將關聯元件設置為不透明(可以由子類別或直接在 JTextComponent 上方便地更改),這種情況是最常見的。此操作將導致繪製元件的背景色。
  2. 將預設的插入符和 highlighter 安裝到關聯元件中。
  3. 附加到編輯器和模型。如果不存在模型,則創建一個預設模型。
  4. 創建用於表示模型的視圖處理器和視圖層次結構。

覆寫:
類別 ComponentUI 中的 installUI
參數:
c - 編輯器元件
另請參見:
ComponentUI.installUI(javax.swing.JComponent)

uninstallUI

public void uninstallUI(JComponent c)
卸載元件的 UI。此方法移除偵聽器、卸載 highlighter、移除視圖並將 keymap 全部設為 null。

覆寫:
類別 ComponentUI 中的 uninstallUI
參數:
c - 編輯器元件
另請參見:
ComponentUI.uninstallUI(javax.swing.JComponent)

update

public void update(Graphics g,
                   JComponent c)
父級類別以無法控制的方式繪製背景(即有人可能希望將圖像平鋪在背景中)。要防止發生兩次這樣的操作,重新實作此方法以進行簡單繪製即可。

註: 父級類別在其背景呈現中也不是執行緒安全的,儘管在預設呈現中不存在這樣的問題。

覆寫:
類別 ComponentUI 中的 update
參數:
g - 將在其中進行繪製的 Graphics 上下文
c - 將繪製的元件;此參數常被忽略,但如果 UI 物件是無狀態的並由多個元件共享,則可以使用該參數
另請參見:
ComponentUI.paint(java.awt.Graphics, javax.swing.JComponent), JComponent.paintComponent(java.awt.Graphics)

paint

public final void paint(Graphics g,
                        JComponent c)
繪製介面。此方法會被傳遞到 paintSafely 方法中,同時保證模型在呈現時不會根據此執行緒的視圖發生更改(如果關聯的模型從 AbstractDocument 派生)。這使得模型能夠進行可能的非同步更新。

覆寫:
類別 ComponentUI 中的 paint
參數:
g - 圖形上下文
c - 編輯器元件
另請參見:
ComponentUI.update(java.awt.Graphics, javax.swing.JComponent)

getPreferredSize

public Dimension getPreferredSize(JComponent c)
獲取編輯器元件的首選大小。如果在接收此請求前已經給出了元件的大小,則此方法在請求視圖層次結構的首選大小之前將設置視圖層次結構的大小,以反映元件的大小。這允許格式化視圖在答覆請求之前格式化當前元件的大小。其他視圖不關心當前的格式化大小,因此均會給出相同的答覆。

覆寫:
類別 ComponentUI 中的 getPreferredSize
參數:
c - 編輯器元件
返回:
大小
另請參見:
JComponent.getPreferredSize(), LayoutManager.preferredLayoutSize(java.awt.Container)

getMinimumSize

public Dimension getMinimumSize(JComponent c)
獲取編輯器元件的最小大小。

覆寫:
類別 ComponentUI 中的 getMinimumSize
參數:
c - 編輯器元件
返回:
大小
另請參見:
JComponent.getMinimumSize(), LayoutManager.minimumLayoutSize(java.awt.Container), ComponentUI.getPreferredSize(javax.swing.JComponent)

getMaximumSize

public Dimension getMaximumSize(JComponent c)
獲取編輯器元件的最大大小。

覆寫:
類別 ComponentUI 中的 getMaximumSize
參數:
c - 編輯器元件
返回:
大小
另請參見:
JComponent.getMaximumSize(), LayoutManager2.maximumLayoutSize(java.awt.Container)

getVisibleEditorRect

protected Rectangle getVisibleEditorRect()
獲取給出根 View 的分派。由於一些不適宜的歷史事件,此方法的命名並不合適。返回的 Rectangle 與可見性沒有任何關係。元件的大小必須為非零正值,才能計算此轉換。

返回:
根視圖的邊界框

modelToView

public Rectangle modelToView(JTextComponent tc,
                             int pos)
                      throws BadLocationException
將模型中的給定位置轉換成視圖坐標系統中的某一個位置。元件的大小必須為非零正值,才能計算此轉換。

指定者:
類別 TextUI 中的 modelToView
參數:
tc - 文本元件,為其安裝此 UI
pos - 要轉換的模型中的本地位置,該值 >= 0
返回:
作為矩形的坐標;如果沒有繪製模型,則返回 null
拋出:
BadLocationException - 如果給定位置不表示關聯文檔中的有效位置
另請參見:
TextUI.modelToView(javax.swing.text.JTextComponent, int)

modelToView

public Rectangle modelToView(JTextComponent tc,
                             int pos,
                             Position.Bias bias)
                      throws BadLocationException
將模型中的給定位置轉換成視圖坐標系統中的某一個位置。元件的大小必須為非零正值,才能計算此轉換。

指定者:
類別 TextUI 中的 modelToView
參數:
tc - 文本元件,為其安裝此 UI
pos - 要轉換的模型中的本地位置,該值 >= 0
返回:
作為矩形的坐標;如果沒有繪製模型,則返回 null
拋出:
BadLocationException - 如果給定位置不表示關聯文檔中的有效位置
另請參見:
TextUI.modelToView(javax.swing.text.JTextComponent, int)

viewToModel

public int viewToModel(JTextComponent tc,
                       Point pt)
將視圖坐標系統中的給定位置轉換成模型中最有代表性的位置。元件的大小必須為非零正值,才能計算此轉換。

指定者:
類別 TextUI 中的 viewToModel
參數:
tc - 文本元件,為其安裝此 UI
pt - 視圖中要轉換的位置。此位置應該與鼠標事件在同一坐標系統中。
返回:
距文檔起始位置的偏移量,該值 >= 0;如果沒有繪製,則返回 -1
另請參見:
TextUI.viewToModel(javax.swing.text.JTextComponent, java.awt.Point)

viewToModel

public int viewToModel(JTextComponent tc,
                       Point pt,
                       Position.Bias[] biasReturn)
將視圖坐標系統中的給定位置轉換成模型中最有代表性的位置。元件的大小必須為非零正值,才能計算此轉換。

指定者:
類別 TextUI 中的 viewToModel
參數:
tc - 為其安裝此 UI 的文本元件
pt - 視圖中要轉換的位置。此位置應該與鼠標事件在同一坐標系統中。
biasReturn - 由此方法填充,以指示給定點是更接近於模型中的前一個字元,還是更接近於模型中的下一個字元
返回:
距文檔起始位置的偏移量,該值 >= 0;如果元件的大小為非正值,則返回 -1。
另請參見:
TextUI.viewToModel(javax.swing.text.JTextComponent, java.awt.Point)

getNextVisualPositionFrom

public int getNextVisualPositionFrom(JTextComponent t,
                                     int pos,
                                     Position.Bias b,
                                     int direction,
                                     Position.Bias[] biasRet)
                              throws BadLocationException
提供確定下一個可以放置一個插入符的可見模型位置的方法。一些視圖可能是不可見的,它們的順序可能與模型中的順序不同,或者它們可能不允許存取模型中的某些位置。

指定者:
類別 TextUI 中的 getNextVisualPositionFrom
參數:
t - 為其安裝此 UI 的文本元件
pos - 要轉換的位置,該位置 >= 0
b - 位置的偏差
direction - 以當前位置開始的方向,可以將它們設想為通常出現在鍵盤上的箭頭鍵。該參數可以是 SwingConstants.WEST、SwingConstants.EAST、SwingConstants.NORTH 或 SwingConstants.SOUTH
biasRet - 套件含返回位置偏差的陣列
返回:
模型中能最好地表示下一個可見位置的位置
拋出:
BadLocationException

damageRange

public void damageRange(JTextComponent tc,
                        int p0,
                        int p1)
促使重新繪製負責模型給定部分的那部分視圖。如果當前沒有繪製視圖,則不執行任何操作。

指定者:
類別 TextUI 中的 damageRange
參數:
tc - 文本元件,為其安裝此 UI
p0 - 範圍的開頭,該值 >= 0
p1 - 範圍的結尾,該值 >= p0
另請參見:
TextUI.damageRange(javax.swing.text.JTextComponent, int, int)

damageRange

public void damageRange(JTextComponent t,
                        int p0,
                        int p1,
                        Position.Bias p0Bias,
                        Position.Bias p1Bias)
促使重新繪製負責模型給定部分的那部分視圖。

指定者:
類別 TextUI 中的 damageRange
參數:
p0 - 範圍的起始位置,該值 >= 0
p1 - 範圍的結束位置,該值 >= p0

getEditorKit

public EditorKit getEditorKit(JTextComponent tc)
獲取 UI 的 EditorKit。

指定者:
類別 TextUI 中的 getEditorKit
參數:
tc - 文本元件,為其安裝此 UI
返回:
編輯器功能
另請參見:
TextUI.getEditorKit(javax.swing.text.JTextComponent)

getRootView

public View getRootView(JTextComponent tc)
獲取分派了相關文本元件(即層次結構的根)的 View,可通過遍歷該視圖確定模型在空間中的表示形式。

註:可以從根視圖遍歷 View 層次結構,其他操作也可以如此。以此方式完成的操作不會像通過 TextUI 的簡單方法調用那樣受到保護。因此,存在共時操作時必須按照調用此方法的邏輯安排適當的操作!

指定者:
類別 TextUI 中的 getRootView
參數:
tc - 文本元件,為其安裝此 UI
返回:
視圖
另請參見:
TextUI.getRootView(javax.swing.text.JTextComponent)

getToolTipText

public String getToolTipText(JTextComponent t,
                             Point pt)
返回在傳入位置上用作工具提示的字元串。這會將該方法轉發到根視圖上。

覆寫:
類別 TextUI 中的 getToolTipText
從以下版本開始:
1.4
另請參見:
JTextComponent.getToolTipText(java.awt.event.MouseEvent), View.getToolTipText(float, float, java.awt.Shape)

create

public View create(Element elem)
創建元素的視圖。如果子類別希望直接實作產生視圖的處理器,則其應該重新實作此方法。預設情況下,它就返回 null,指示它無法表示該元素。

指定者:
介面 ViewFactory 中的 create
參數:
elem - 元素
返回:
視圖
另請參見:
View

create

public View create(Element elem,
                   int p0,
                   int p1)
創建元素的視圖。如果子類別希望直接實作產生視圖的處理器,則其應該重新實作此方法。預設情況下,它就返回 null,指示它無法表示該元素。

參數:
elem - 元素
p0 - 開始偏移量,該值 >= 0
p1 - 結束偏移量,該值 >= p0
返回:
視圖

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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