javax.swing.plaf.basic

接口
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&