Module  java.desktop

Class BasicTextUI

  • All Implemented Interfaces:
    ViewFactory
    已知直接子类:
    BasicEditorPaneUIBasicTextAreaUIBasicTextFieldUIDefaultTextUI


    public abstract class BasicTextUI
    extends TextUI
    implements ViewFactory

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

    大多数状态作为绑定属性保存在关联的JTextComponent中,UI会为各种属性安装默认值。 此默认值将为所有属性安装。 通常,LAF实现将会更多。 至少,LAF通常会安装密钥绑定。

    如果与JTextComponent相关联的DocumentAbstractDocument的子类,则AbstractDocument还提供了一些并发支持。 访问视图(或视图层次结构)在任何使模型突变的线程与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

    • 构造方法详细信息

      • BasicTextUI

        public BasicTextUI​()
        创建一个新的UI。
    • 方法详细信息

      • createCaret

        protected Caret createCaret​()
        创建用于插入符号的对象。 默认情况下,创建BasicCaret的一个实例。 该方法可以重新定义,以提供实现InputPosition接口或JCaret子类的其他东西。
        结果
        插入符号对象
      • createHighlighter

        protected Highlighter createHighlighter​()
        创建用于添加高光的对象。 默认情况下,创建BasicHighlighter的实例。 该方法可以重新定义,以提供实现荧光笔界面或DefaultHighlighter子类的其他内容。
        结果
        荧光笔
      • getKeymapName

        protected String getKeymapName​()
        获取此UI将默认安装/使用的键盘映射的名称。 这是为了根据类名创建一个名称。 名称是删除包前缀的类的名称。
        结果
        名字
      • createKeymap

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

        用于创建键盘映射的绑定集由UIManager使用通过组合getPropertyPrefix()方法和字符串.keyBindings形成的键来.keyBindings 预计类型为JTextComponent.KeyBinding[]

        结果
        键盘图
        另请参见:
        getKeymapName()JTextComponent
      • propertyChange

        protected void propertyChange​(PropertyChangeEvent evt)
        当在关联的JTextComponent上更改bound属性时,将调用此方法。 这是一个钩子,UI实现可能会更改,以反映UI如何显示JTextComponent子类的绑定属性。 这被实现为不做任何事情(即,在调用此方法之前处理JTextComponent中对属性的响应)。 如果可编辑和/或启用状态改变,此实现会更新文本组件的背景。
        参数
        evt - 财产变更事件
      • getPropertyPrefix

        protected abstract String getPropertyPrefix​()
        获取通过UIManager查找属性的键。 这被用作所有标准文本属性的前缀。
        结果
        名字
      • installDefaults

        protected void installDefaults​()
        初始化组件属性,如字体,前景,背景,插入符号颜色,选择颜色,选定的文本颜色,禁用的文本颜色和边框颜色。 只有当当前值为null或UIResource时才会设置字体,前景和后台属性,如果当前值为空,则设置其他属性。
        另请参见:
        uninstallDefaults()installUI(javax.swing.JComponent)
      • uninstallDefaults

        protected void uninstallDefaults​()
        将未明确覆盖的组件属性设置为null 如果某个属性的当前值不是UIResource则该属性被视为被覆盖。
        另请参见:
        installDefaults()uninstallUI(javax.swing.JComponent)
      • installListeners

        protected void installListeners​()
        安装用户界面的侦听器。
      • 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已经安装。
        结果
        编辑器组件
      • 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属性,则将关联组件设置为opaque。 这将导致组件的背景颜色被绘制。
        2. 将默认插入符号和荧光笔安装到关联的组件中。 仅当这些属性的当前值为nullnull的实例时才会设置
        3. 附加到编辑和模型。 如果没有模型,则创建默认模型。
        4. 创建视图工厂和用于表示模型的视图层次结构。
        重写:
        installUIComponentUI
        参数
        c - 编辑器组件
        另请参见:
        ComponentUI.installUI(javax.swing.JComponent)
      • update

        public void update​(Graphics g,
                           JComponent c)
        Superclass以不可控制的方式绘制背景(即可能需要将图像平铺到背景中)。 为了防止这种情况发生两次,该方法被重新实现以简单地绘制。

        注意:注意:Superclass在渲染背景时也不是线程安全的,尽管这不是默认渲染的问题。

        重写:
        updateComponentUI
        参数
        g - 要绘画的 Graphics上下文
        c - 正在涂漆的部件; 这个参数经常被忽略,但如果UI对象是无状态的并且被多个组件共享,则可能会被使用
        另请参见:
        ComponentUI.paint(java.awt.Graphics, javax.swing.JComponent)JComponent.paintComponent(java.awt.Graphics)
      • getPreferredSize

        public Dimension getPreferredSize​(JComponent c)
        获取编辑器组件的首选大小。 如果组件在接收到此请求之前已经被赋予了一个大小,那么它将在请求视图层次结构的首选大小之前设置视图层次结构的大小以反映组件的大小。 这允许格式化视图在回答请求之前格式化为当前组件大小。 其他视图不关心当前格式的大小,也可以给出相同的答案。
        重写:
        getPreferredSizeComponentUI
        参数
        c - 编辑器组件
        结果
        尺寸
        另请参见:
        JComponent.getPreferredSize()LayoutManager.preferredLayoutSize(java.awt.Container)
      • getVisibleEditorRect

        protected Rectangle getVisibleEditorRect​()
        获取分配给根视图。 由于一系列不幸的历史事件,这种方法被不正当地命名。 返回的Rectangle与可见性无关。 该组件必须具有非零正的大小,以便计算该翻译。
        结果
        根视图的边框
      • viewToModel2D

        public int viewToModel2D​(JTextComponent tc,
                                 Point2D pt,
                                 Position.Bias[] biasReturn)
        描述从类复制: TextUI
        提供从视图坐标空间到模型的逻辑坐标空间的映射。
        重写:
        viewToModel2DTextUI
        参数
        tc - 安装此UI的文本组件
        pt - 视图中的位置翻译。
        biasReturn - 通过这种方法填写,以指示给定的点是否更接近模型中的上一个或下一个字符
        结果
        模型中最符合视图 >= 0给定点的 >= 0
      • getNextVisualPositionFrom

        public int getNextVisualPositionFrom​(JTextComponent t,
                                             int pos,
                                             Position.Bias b,
                                             int direction,
                                             Position.Bias[] biasRet)
                                      throws BadLocationException
        提供一种方法来确定可能放置插入符号的下一个视觉表示的模型位置。 某些视图可能不可见,它们可能与模型中找不到相同的顺序,也可能不允许访问模型中的某些位置。
        Specified by:
        getNextVisualPositionFromTextUI
        参数
        t - 安装此UI的文本组件
        pos - 转换> = 0的位置
        b - 位置的偏差
        direction - 从当前位置的方向,可以被认为是通常在键盘上找到的箭头键。 这可能是SwingConstants.WEST,SwingConstants.EAST,SwingConstants.NORTH或SwingConstants.SOUTH
        biasRet - 一个数组,用于包含返回位置的偏差
        结果
        模型中最能代表下一个位置视觉位置的位置
        异常
        BadLocationException - 对于文档模型中的错误位置
      • damageRange

        public void damageRange​(JTextComponent t,
                                int p0,
                                int p1,
                                Position.Bias p0Bias,
                                Position.Bias p1Bias)
        导致部分视图对模型的给定部分负责。
        Specified by:
        damageRangeTextUI
        参数
        p0 - 范围的开始> = 0
        p1 - 范围的结束> = p0
        t - 安装此UI的文本组件
        p0Bias - 第一个字符位置偏向前一个字符或下一个字符
        p1Bias - 第二个字符位置偏向前一个字符或下一个字符
      • getRootView

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

        注意:视图层次结构可以从根视图中遍历,其他的事情也可以完成。 以这种方式完成的事情不能通过TextUI进行简单的方法调用来保护。 因此,存在并发性的正确操作必须由调用此方法的任何逻辑排列!

        Specified by:
        getRootViewTextUI
        参数
        tc - 安装此UI的文本组件
        结果
        风景
        另请参见:
        TextUI.getRootView(javax.swing.text.JTextComponent)
      • create

        public View create​(Element elem)
        创建元素的视图。 如果一个子类希望直接实现生产视图的工厂,应该重新实现这种方法。 默认情况下,它只返回null,表示无法表示元素。
        Specified by:
        create在接口 ViewFactory
        参数
        elem - 元素
        结果
        风景
        另请参见:
        View
      • create

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