Module java.desktop

Class BasicTextUI

所有已实现的接口:
ViewFactory
直接已知的子类:
BasicEditorPaneUI, BasicTextAreaUI, BasicTextFieldUI, DefaultTextUI

public abstract class BasicTextUI extends TextUI implements ViewFactory

文本组件外观的基础。这提供了在为JTextComponent的扩展创建外观时可能有用的基本编辑器视图和控制器服务。

大多数状态保存在关联的JTextComponent中作为绑定属性,并且UI为各种属性安装了默认值。此默认值将为所有属性安装某些内容。通常,LAF实现会做更多。但是,至少,LAF通常会安装键绑定。

如果与JTextComponent关联的DocumentAbstractDocument的子类,则此类还提供了一些并发支持。对于View(或View层次结构)的访问在任何更改模型的线程和Swing事件线程之间进行序列化(预期进行渲染、执行模型/视图坐标转换等)。任何对根视图的访问都应首先在AbstractDocument上获取读取锁,并在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。从1.4开始,已将对所有JavaBeans的长期存储支持添加到java.beans包中。请参见XMLEncoder

  • Constructor Details

    • BasicTextUI

      public BasicTextUI()
      创建一个新的UI。
  • Method Details

    • createCaret

      protected Caret createCaret()
      创建用于插入符号的对象。默认情况下,将创建BasicCaret的实例。可以重新定义此方法以提供实现InputPosition接口或JCaret的子类的其他内容。
      返回:
      插入符对象
    • createHighlighter

      protected Highlighter createHighlighter()
      创建用于添加高亮的对象。默认情况下,将创建BasicHighlighter的实例。可以重新定义此方法以提供实现Highlighter接口或DefaultHighlighter的子类的其他内容。
      返回:
      高亮器
    • getKeymapName

      protected String getKeymapName()
      获取将默认情况下安装/使用的键映射的名称。此方法实现为基于类名创建名称。名称是去除包前缀的类的名称。
      返回:
      名称
    • createKeymap

      protected Keymap createKeymap()
      创建用于文本组件的键映射,并将任何必要的绑定安装到其中。默认情况下,键映射在此类型的所有实例之间共享。键映射的名称由getKeymapName方法定义。如果找不到键映射,则使用JTextComponent中的DEFAULT_KEYMAP。

      用于创建键映射的绑定集是通过使用由getPropertyPrefix()方法和字符串.keyBindings组合形成的键从UIManager中获取的。类型预期为JTextComponent.KeyBinding[]

      返回:
      键映射
      参见:
    • propertyChange

      protected void propertyChange(PropertyChangeEvent evt)
      当关联的JTextComponent上的绑定属性更改时调用此方法。这是一个挂钩,UI实现可以更改以反映UI如何显示JTextComponent子类的绑定属性。此实现不执行任何操作(即在调用此方法之前,JTextComponent本身的属性的响应已处理)。如果可编辑状态和/或启用状态更改,此实现将更新文本组件的背景。
      参数:
      evt - 属性更改事件
    • getPropertyPrefix

      protected abstract String getPropertyPrefix()
      获取用作通过UIManager查找属性的键的名称。这用作所有标准文本属性的前缀。
      返回:
      名称
    • installDefaults

      protected void installDefaults()
      初始化组件属性,例如字体、前景色、背景色、插入符号颜色、选择颜色、选定文本颜色、禁用文本颜色、边框和边距。如果当前值为null或UIResource,则设置每个属性。
      参见:
    • uninstallDefaults

      protected void uninstallDefaults()
      将未明确覆盖的组件属性设置为null。如果当前值不是UIResource,则认为属性已被覆盖。
      参见:
    • 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. 如果客户端程序尚未设置opaque属性,则将相关组件设置为不透明。这将导致绘制组件的背景颜色。
      2. 将默认插入符号和高亮器安装到相关组件中。仅当它们的当前值为nullUIResource的实例时才设置这些属性。
      3. 连接到编辑器和模型。如果没有模型,则会创建一个默认模型。
      4. 创建用于表示模型的视图工厂和视图层次结构。
      覆盖:
      installUI 在类 ComponentUI
      参数:
      c - 编辑器组件
      参见:
    • uninstallUI

      public void uninstallUI(JComponent c)
      为组件卸载UI。这将移除监听器,卸载高亮器,移除视图,并将键映射设置为null。
      覆盖:
      uninstallUI 在类 ComponentUI
      参数:
      c - 编辑器组件
      参见:
    • update

      public void update(Graphics g, JComponent c)
      超类以不可控的方式绘制背景(例如,可能希望将图像平铺到背景中)。为防止此方法被调用两次,此方法被重新实现为简单绘制。

      注意: 超类在渲染背景时也不是线程安全的,尽管默认渲染不会出现问题。

      覆盖:
      update 在类 ComponentUI
      参数:
      g - 用于绘制的Graphics上下文
      c - 正在绘制的组件;通常会忽略此参数,但如果UI对象是无状态的并且由多个组件共享,则可能会使用它
      参见:
    • paint

      public final void paint(Graphics g, JComponent c)
      绘制界面。此方法路由到paintSafely方法,保证模型不会从此线程的视图更改,同时进行渲染(如果相关模型是从AbstractDocument派生的)。这使得模型有可能异步更新。
      覆盖:
      paint 在类 ComponentUI
      参数:
      g - 图形上下文
      c - 编辑器组件
      参见:
    • getPreferredSize

      public Dimension getPreferredSize(JComponent c)
      获取编辑器组件的首选大小。如果在收到此请求之前给组件设置了大小,则会将视图层次结构的大小设置为反映在请求视图层次结构的首选大小之前的组件大小。这允许格式化视图根据当前组件大小进行格式化,然后再回答请求。其他视图不关心当前格式化大小,无论如何都会给出相同的答案。
      覆盖:
      getPreferredSize 在类 ComponentUI
      参数:
      c - 编辑器组件
      返回:
      大小
      参见:
    • getMinimumSize

      public Dimension getMinimumSize(JComponent c)
      获取编辑器组件的最小大小。
      覆盖:
      getMinimumSize 在类 ComponentUI
      参数:
      c - 编辑器组件
      返回:
      大小
      参见:
    • getMaximumSize

      public Dimension getMaximumSize(JComponent c)
      获取编辑器组件的最大大小。
      覆盖:
      getMaximumSize 在类 ComponentUI
      参数:
      c - 编辑器组件
      返回:
      大小
      参见:
    • getVisibleEditorRect

      protected Rectangle getVisibleEditorRect()
      获取分配给根视图的矩形。由于一系列不幸的历史事件,此方法的命名不当。返回的矩形与可见性无关。组件必须具有非零正大小才能计算此转换。
      返回:
      根视图的边界框
    • modelToView

      @Deprecated(since="9") public Rectangle modelToView(JTextComponent tc, int pos) throws BadLocationException
      将模型中给定位置转换为视图坐标系中的位置。组件必须具有非零正大小才能计算此转换。
      指定者:
      modelToView 在类 TextUI
      参数:
      tc - 安装此UI的文本组件
      pos - 要转换的模型中的本地位置 >= 0
      返回:
      作为矩形的坐标,如果模型未绘制则返回null
      抛出:
      BadLocationException - 如果给定位置在关联文档中不是有效位置
      参见:
    • modelToView

      @Deprecated(since="9") public Rectangle modelToView(JTextComponent tc, int pos, Position.Bias bias) throws BadLocationException
      将模型中给定位置转换为视图坐标系中的位置。组件必须具有非零正大小才能计算此转换。
      指定者:
      modelToView 在类 TextUI
      参数:
      tc - 安装此UI的文本组件
      pos - 要转换的模型中的本地位置 >= 0
      bias - 位置的偏好
      返回:
      作为矩形的坐标,如果模型未被绘制则为null
      抛出:
      BadLocationException - 如果给定位置在关联文档中不表示有效位置
      参见:
    • viewToModel

      @Deprecated(since="9") public int viewToModel(JTextComponent tc, Point pt)
      将视图坐标系中给定位置转换为模型中最近的代表位置。组件必须具有非零正大小才能计算此转换。
      指定者:
      viewToModel 在类 TextUI
      参数:
      tc - 安装此UI的文本组件
      pt - 要转换的视图中的位置。这应该与鼠标事件中的坐标系相同。
      返回:
      距离文档开头的偏移量 >= 0,如果未绘制则为-1
      参见:
    • viewToModel

      @Deprecated(since="9") public int viewToModel(JTextComponent tc, Point pt, Position.Bias[] biasReturn)
      将视图坐标系中给定位置转换为模型中最近的代表位置。组件必须具有非零正大小才能计算此转换。
      指定者:
      viewToModel 在类 TextUI
      参数:
      tc - 安装此UI的文本组件
      pt - 要转换的视图中的位置。这应该与鼠标事件中的坐标系相同。
      biasReturn - 由此方法填充,以指示给定点是更接近前一个字符还是下一个字符的位置
      返回:
      距离文档开头的偏移量 >= 0,如果组件尚未具有正大小则为-1。
      参见:
    • getNextVisualPositionFrom

      public int getNextVisualPositionFrom(JTextComponent t, int pos, Position.Bias b, int direction, Position.Bias[] biasRet) throws BadLocationException
      提供一种确定下一个可能放置插入符号的视觉表示模型位置的方式。某些视图可能不可见,它们可能不按照模型中找到的顺序排列,或者它们可能根本不允许访问模型中的某些位置。
      指定者:
      getNextVisualPositionFrom 在类 TextUI
      参数:
      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)
      导致负责给定模型部分的视图重新绘制。如果视图当前未绘制,则不执行任何操作。
      指定者:
      damageRange 在类 TextUI
      参数:
      tc - 安装此UI的文本组件
      p0 - 范围的开始 >= 0
      p1 - 范围的结束 >= p0
      参见:
    • damageRange

      public void damageRange(JTextComponent t, int p0, int p1, Position.Bias p0Bias, Position.Bias p1Bias)
      导致负责给定模型部分的视图重新绘制。
      指定者:
      damageRange 在类 TextUI
      参数:
      t - 安装此UI的文本组件
      p0 - 范围的开始 >= 0
      p1 - 范围的结束 >= p0
      p0Bias - 第一个字符位置的偏好,朝向前一个字符或下一个字符
      p1Bias - 第二个字符位置的偏好,朝向前一个字符或下一个字符
    • getEditorKit

      public EditorKit getEditorKit(JTextComponent tc)
      获取UI的EditorKit。
      指定者:
      getEditorKit 在类 TextUI
      参数:
      tc - 安装此UI的文本组件
      返回:
      编辑器功能
      参见:
    • getRootView

      public View getRootView(JTextComponent tc)
      获取具有关联文本组件的分配(即层次结构的根)的View,可以遍历以确定模型在空间上的表示方式。

      警告: 可以从根视图遍历视图层次结构,还可以执行其他操作。以这种方式执行的操作无法像通过TextUI的简单方法调用那样受到保护。因此,调用此方法的任何逻辑必须安排在并发存在的情况下进行正确操作!

      指定者:
      getRootView 在类 TextUI
      参数:
      tc - 安装此UI的文本组件
      返回:
      视图
      参见:
    • getToolTipText

      public String getToolTipText(JTextComponent t, Point pt)
      返回在传入位置使用作为工具提示的字符串。这将方法转发到根View。
      覆盖:
      getToolTipText 在类 TextUI
      参数:
      t - 安装此UI的文本组件
      pt - 指定要获取工具提示的位置的Point
      返回:
      包含工具提示的String
      自1.4起:
      1.4
      参见:
    • create

      public View create(Element elem)
      为元素创建一个视图。如果子类希望直接实现生成视图的工厂,它应重新实现此方法。默认情况下,它只返回null,表示无法表示元素。
      指定者:
      create 在接口 ViewFactory
      参数:
      elem - 元素
      返回:
      视图
      参见:
    • create

      public View create(Element elem, int p0, int p1)
      为元素创建一个视图。如果子类希望直接实现生成视图的工厂,它应重新实现此方法。默认情况下,它只返回null,表示无法表示元素的部分。
      参数:
      elem - 元素
      p0 - 起始偏移量 >= 0
      p1 - 结束偏移量 >= p0
      返回:
      视图