Module  java.desktop
软件包  javax.swing.text.html

Class HTMLEditorKit

  • All Implemented Interfaces:
    SerializableCloneableAccessible


    public class HTMLEditorKit
    extends StyledEditorKit
    implements Accessible
    Swing JEditorPane文本组件通过称为EditorKit的插件机制来支持不同类型的内容。 由于HTML是非常受欢迎的内容格式,默认情况下提供了一些支持。 该类提供了默认支持,该类支持HTML版本3.2(具有一些扩展),并且正在向版本4.0迁移。 <applet>标记不受支持,但对<object>标签提供了一些支持。

    HTML EditorKit提供了几个目标,对HTML进行建模的方式有影响。 这些都以实质的方式影响了其设计。

    支持编辑
    JEditorPane的插件似乎可以提供编辑支持,但这个事实有几个设计考虑。 有大量的HTML文档不符合HTML规范。 如果要编辑它们,则必须将其归一化为正确的形式。 此外,用户不希望被呈现过多的结构编辑,因此使用传统文本编辑手势优先于使用完全按照HTML文档中定义的HTML结构。

    HTML的建模由类HTMLDocument 其文档描述了HTML如何建模的细节。 编辑支持充分利用文本包。

    可扩展的/可扩展
    为了最大化这个套件的有用性,我们已经做了大量的工作来扩展它。 这些是一些功能。
    1. 解析器可更换。 默认解析器是基于DTD的热Java解析器。 可以使用不同的DTD,或者可以使用完全不同的解析器。 要更改解析器,请重新实现getParser方法。 默认的解析器在第一次被请求时被动态加载,所以如果使用另外一个解析器,类文件将永远不被加载。 默认解析器位于此包下面的一个名为parser的单独包中。
    2. 解析器驱动由HTMLDocument提供的ParserCallback。 要更改回调,子类HTMLDocument并重新实现createDefaultDocument方法以返回生成不同读取器的文档。 读者控制文档的结构。 虽然文档默认提供HTML支持,但是没有任何东西阻止支持导致替代元素结构的非HTML标签。
    3. 模型的默认视图作为View实现的层次结构提供,因此可以通过提供新的View实现来轻松地自定义特定元素的显示方式或添加新类型元素的功能。 默认视图由HTMLFactory类提供。 这可以通过子类化或替换HTMLFactory并重新实现getViewFactory方法来返回替代工厂来轻松更改。
    4. View实现主要从CSS属性中删除,这些属性保留在视图中。 这使得有可能在同一模型上映射出多个视图,这些视图显着不同。 这对打印尤其有用。 对于大多数HTML属性,HTML属性将转换为CSS属性进行显示。 这有助于使View实现更通用
    异步加载
    较大的文档涉及大量解析,需要一些时间才能加载。 默认情况下,此套件将生成将使用JEditorPane.setPage加载异步加载的JEditorPane.setPage 这由文档上的属性控制。 方法createDefaultDocument可以被覆盖以改变这一点。 工作批量由HTMLDocument.HTMLReader课程完成。 实际工作由文本包中的DefaultStyledDocumentAbstractDocument类完成。
    从目前的LAF定制
    HTML提供了一组众所周知的功能,而没有精确地指定显示特征。 Swing有一个主题机制,它的外观和感觉实现。 将显示特征提供给HTML视图是理想的外观和感觉。 例如,视力差的用户将需要高对比度并且比典型的字体更大。

    对此的支持由StyleSheet类提供。 在EditorKit上设置StyleSheet属性会严重影响HTML的呈现。

    没有损失
    EditorKit可以读取和保存文档。 如果两次操作之间没有数据丢失,通常情况下用户最乐意。 HTMLEditorKit的政策将是存储未被识别或不一定可见的东西,以便随后写出。 因此,HTML文档的模型应包含读取文档时发现的所有信息。 这在某些方面受到支持编辑的需要(即不正确的文档有时必须被归一化)。 指导原则是信息不应该丢失,但有些可能被合成以产生更正确的模型,或者可以重新排列。
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • HTMLEditorKit

        public HTMLEditorKit​()
        构造一个HTMLEditorKit,创建一个StyleContext,并加载样式表。
    • 方法详细信息

      • getContentType

        public String getContentType​()
        获取此套件代表支持的数据的MIME类型。 该套件支持类型text/html
        重写:
        getContentTypeDefaultEditorKit
        结果
        方式
      • read

        public void read​(Reader in,
                         Document doc,
                         int pos)
                  throws IOException,
                         BadLocationException
        从给定的流插入内容。 如果doc是HTMLDocument的一个实例,这将读取HTML 3.2文本。 将HTML插入非空文档必须位于主体元素内,如果不插入到正文中,将抛出异常。 当插入非空文档时,身体之外的所有标签(头,标题)将被删除。
        重写:
        readDefaultEditorKit
        参数
        in - 要读取的流
        doc - 插入的目的地
        pos - 放置内容的文档中的位置
        异常
        IOException - 任何I / O错误
        BadLocationException - 如果pos表示文档中的无效位置
        RuntimeException - (最终将是一个BadLocationException)如果pos无效
      • insertHTML

        public void insertHTML​(HTMLDocument doc,
                               int offset,
                               String html,
                               int popDepth,
                               int pushDepth,
                               HTML.Tag insertTag)
                        throws BadLocationException,
                               IOException
        将HTML插入到现有文档中。
        参数
        doc - 要插入的文档
        offset - 插入HTML的偏移量
        popDepth - 插入之前要生成的ElementSpec.EndTagTypes的数量
        html - HTML字符串
        pushDepth - ElementSpec.StartTagTypes的数量,其方向为ElementSpec.JoinNextDirection,应该在插入之前生成,但在生成结束标签之后
        insertTag - 开始插入文档的第一个标签
        异常
        BadLocationException - 如果 offset无效
        IOException - 在I / O错误
        RuntimeException - (最终将是一个BadLocationException)如果pos无效
      • deinstall

        public void deinstall​(JEditorPane c)
        当该套件从JEditorPane中删除时调用。 这用于取消注册附加的任何监听器。
        重写:
        deinstallStyledEditorKit
        参数
        c - JEditorPane
      • setStyleSheet

        public void setStyleSheet​(StyleSheet s)
        设置用于渲染各种HTML元素的样式集。 这些样式是根据CSS规范指定的。 套件生成的每个文件都将具有可以将文档特定样式添加到的工作表的副本。 默认情况下,指定的StyleSheet由所有HTMLEditorKit实例共享。 如果需要,应该重新实现这一点,以提供更精细的粒度。
        参数
        s - 样式表
      • getStyleSheet

        public StyleSheet getStyleSheet​()
        获取当前用于呈现HTML元素的一组样式。 默认情况下,DEFAULT_CSS指定的资源将被加载,并由所有HTMLEditorKit实例共享。
        结果
        StyleSheet
      • getActions

        public Action[] getActions​()
        获取编辑器的命令列表。 这是超级类支持的命令的列表,这些命令由对本地定义的样式操作定义的命令集合进行了扩充。
        重写:
        getActionsStyledEditorKit
        结果
        命令列表
      • createInputAttributes

        protected void createInputAttributes​(Element element,
                                             MutableAttributeSet set)
        element的AttributeSet中的键/值复制到set 这不会复制组件,图标或元素名称属性。 子类可能希望改进什么是什么和什么不复制在这里。 但请务必先删除set中的所有属性。

        随时插入符号在不同位置移动即可。

        重写:
        createInputAttributesStyledEditorKit
        参数
        element - 元素
        set - 属性
      • setDefaultCursor

        public void setDefaultCursor​(Cursor cursor)
        设置默认光标。
        参数
        cursor - 一个游标
        从以下版本开始:
        1.3
      • getDefaultCursor

        public Cursor getDefaultCursor​()
        返回默认游标。
        结果
        光标
        从以下版本开始:
        1.3
      • setLinkCursor

        public void setLinkCursor​(Cursor cursor)
        将光标设置为使用链接。
        参数
        cursor - 一个游标
        从以下版本开始:
        1.3
      • getLinkCursor

        public Cursor getLinkCursor​()
        返回光标以超链接使用。
        结果
        光标
        从以下版本开始:
        1.3
      • isAutoFormSubmission

        public boolean isAutoFormSubmission​()
        指示是自动处理html表单提交还是仅 FormSubmitEvent
        结果
        如果html表单提交被自动处理,则为true,否则为false。
        从以下版本开始:
        1.5
        另请参见:
        setAutoFormSubmission(boolean)
      • setAutoFormSubmission

        public void setAutoFormSubmission​(boolean isAuto)
        指定是否自动处理html表单提交或仅FormSubmitEvent 默认设置为true。
        参数
        isAuto - 如果是 true ,html表单提交被自动处理。
        从以下版本开始:
        1.5
        另请参见:
        isAutoFormSubmission()FormSubmitEvent
      • getParser

        protected HTMLEditorKit.Parser getParser​()
        获取解析器以用于读取HTML流。 这可以被重新实现以提供不同的解析器。 默认实现是动态加载的,以避免在不使用默认解析器时加载默认解析器的开销。 默认解析器是使用HTML 3.2 DTD的HotJava解析器。
        结果
        解析器
      • getAccessibleContext

        public AccessibleContext getAccessibleContext​()
        返回与此编辑器工具包关联的AccessibleContext
        Specified by:
        getAccessibleContext在接口 Accessible
        结果
        与此编辑器工具包相关联的AccessibleContext
        从以下版本开始:
        1.4