JavaTM 2 Platform
Standard Ed. 5.0

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 实现生成。
  3. 创建较复杂的类型还有一种较为不常见的方式,就是让 UI 实现为工厂创建一个单独的对象。要做到这一点,应该重新实现 #createViewFactory 方法以返回某个工厂。

警告:此类的已序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储或运行相同 Swing 版本的应用程序之间的 RMI。从 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 上有一个 bound 属性更改时,此方法被调用。
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
 
从类 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 上有一个 bound 属性更改时,此方法被调用。此方法是一个挂钩,UI 实现可以更改它来反映 UI 显示 JTextComponent 子类的 bound 属性的方式。实现此方法并不进行任何操作。(即处理对 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
参数:
pos - 要转换的位置,该值 >= 0
a - 为呈现分配的区域
direction - 以当前位置开始的方向,可以将它们设想为通常出现在键盘上的箭头键。该参数可以是 SwingConstants.WEST、SwingConstants.EAST、SwingConstants.NORTH 或 SwingConstants.SOUTH。
返回:
模型中能最好地表示下一个可见位置的位置。
抛出:
BadLocationException
IllegalArgumentException - 如果方向无效

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. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策