Module java.desktop

Class HTMLEditorKit

所有已实现的接口:
Serializable, Cloneable, Accessible

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的Hot Java解析器。可以使用不同的DTD,或者可以使用完全不同的解析器。要更改解析器,请重新实现getParser方法。默认解析器在首次请求时动态加载,因此如果使用替代解析器,则永远不会加载类文件。默认解析器位于此包下方的名为parser的单独包中。
  2. 解析器驱动ParserCallback,由HTMLDocument提供。要更改回调,请对HTMLDocument进行子类化,并重新实现createDefaultDocument方法以返回生成不同读取器的文档。读取器控制文档的结构。尽管文档默认提供HTML支持,但没有任何阻止支持导致产生替代元素结构的非HTML标记。
  3. 模型的默认视图由一组View实现层次结构提供,因此可以轻松定制特定元素的显示方式,或通过提供新的View实现来为新类型的元素添加功能。默认的视图集由HTMLFactory类提供。可以通过对HTMLFactory进行子类化或替换并重新实现getViewFactory方法来轻松更改这一点,以返回替代工厂。
  4. View实现主要基于CSS属性,这些属性保存在视图中。这使得可以在同一模型上映射多个视图,这些视图看起来完全不同。这对打印特别有用。对于大多数HTML属性,HTML属性会转换为CSS属性以进行显示。这有助于使View实现更具通用性。
异步加载
较大的文档涉及大量解析并需要一些时间来加载。默认情况下,如果使用JEditorPane.setPage加载文档,则此工具包会生成将异步加载的文档。这由文档上的一个属性控制。可以重写方法createDefaultDocument来更改这一点。工作的批处理由HTMLDocument.HTMLReader类完成。实际工作由文本包中的DefaultStyledDocumentAbstractDocument类完成。
从当前LAF自定义
HTML提供了一组众所周知的功能,但并没有准确指定显示特性。Swing具有用于其外观和感觉实现的主题机制。希望外观和感觉将显示特性反馈到HTML视图中。例如,视力较差的用户可能希望高对比度和比典型字体大的字体。

这一支持由StyleSheet类提供。通过在EditorKit上设置StyleSheet属性,可以对HTML的呈现产生很大影响。

非丢失
EditorKit具有读取和保存文档的能力。如果在这两个操作之间没有数据丢失,通常会让用户感到最满意。HTMLEditorKit的策略是存储未识别或不一定可见的内容,以便随后写出。因此,HTML文档的模型应包含在读取文档时发现的所有信息。这在某种程度上受到支持编辑的限制(即有时必须规范化不正确的文档)的约束。指导原则是信息不应丢失,但某些信息可能会被合成以生成更正确的模型,或者可能会被重新排列。
  • Field Details

    • DEFAULT_CSS

      public static final String DEFAULT_CSS
      设置标签视图的默认层叠样式表文件。
      参见:
    • BOLD_ACTION

      public static final String BOLD_ACTION
      粗体操作标识符
      参见:
    • ITALIC_ACTION

      public static final String ITALIC_ACTION
      斜体操作标识符
      参见:
    • PARA_INDENT_LEFT

      public static final String PARA_INDENT_LEFT
      段落左缩进操作标识符
      参见:
    • PARA_INDENT_RIGHT

      public static final String PARA_INDENT_RIGHT
      段落右缩进操作标识符
      参见:
    • FONT_CHANGE_BIGGER

      public static final String FONT_CHANGE_BIGGER
      字体大小增加到下一个值的操作标识符
      参见:
    • FONT_CHANGE_SMALLER

      public static final String FONT_CHANGE_SMALLER
      字体大小减小到下一个值的操作标识符
      参见:
    • COLOR_ACTION

      public static final String COLOR_ACTION
      颜色选择操作标识符,颜色作为参数传递
      参见:
    • LOGICAL_STYLE_ACTION

      public static final String LOGICAL_STYLE_ACTION
      逻辑样式选择操作标识符,逻辑样式作为参数传递
      参见:
    • IMG_ALIGN_TOP

      public static final String IMG_ALIGN_TOP
      将图像对齐到顶部。
      参见:
    • IMG_ALIGN_MIDDLE

      public static final String IMG_ALIGN_MIDDLE
      将图像对齐到中间。
      参见:
    • IMG_ALIGN_BOTTOM

      public static final String IMG_ALIGN_BOTTOM
      将图像对齐到底部。
      参见:
    • IMG_BORDER

      public static final String IMG_BORDER
      将图像对齐到边框。
      参见:
  • Constructor Details

    • HTMLEditorKit

      public HTMLEditorKit()
      构造一个HTMLEditorKit,创建一个StyleContext,并加载样式表。
  • Method Details

    • getContentType

      public String getContentType()
      获取此工具包表示支持的数据的MIME类型。此工具包支持类型text/html
      覆盖:
      getContentType 在类 DefaultEditorKit
      返回:
      类型
    • getViewFactory

      public ViewFactory getViewFactory()
      获取适用于生成由此工具包生成的任何模型的视图的工厂。
      覆盖:
      getViewFactory 在类 StyledEditorKit
      返回:
      工厂
    • createDefaultDocument

      public Document createDefaultDocument()
      创建适合此类型编辑器的未初始化文本存储模型。
      覆盖:
      createDefaultDocument 在类 StyledEditorKit
      返回:
      模型
    • read

      public void read(Reader in, Document doc, int pos) throws IOException, BadLocationException
      从给定流中插入内容。如果doc是HTMLDocument的实例,则将读取HTML 3.2文本。将HTML插入非空文档必须在body Element内部,如果不在body内部插入,则会抛出异常。在向非空文档插入时,所有body之外的标签(head,title)将被丢弃。
      覆盖:
      read 在类 DefaultEditorKit
      参数:
      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的偏移量
      html - HTML字符串
      popDepth - 在插入之前生成的ElementSpec.EndTagTypes数量
      pushDepth - 在生成结束标签后插入之前应生成的具有ElementSpec.JoinNextDirection方向的ElementSpec.StartTagTypes的数量,但在生成结束标签之后
      insertTag - 开始插入到文档中的第一个标签
      抛出:
      BadLocationException - 如果offset无效
      IOException - I/O错误
      RuntimeException - (最终将是BadLocationException)如果pos无效
    • write

      public void write(Writer out, Document doc, int pos, int len) throws IOException, BadLocationException
      将文档中的内容写入给定流,格式适合此类内容处理程序。
      覆盖:
      write 在类 DefaultEditorKit
      参数:
      out - 要写入的流
      doc - 写入的源
      pos - 获取内容的文档位置
      len - 要写出的数量
      抛出:
      IOException - 任何I/O错误
      BadLocationException - 如果pos表示文档内的无效位置
    • install

      public void install(JEditorPane c)
      当将工具包安装到JEditorPane中时调用。
      覆盖:
      install 在类 StyledEditorKit
      参数:
      c - JEditorPane
    • deinstall

      public void deinstall(JEditorPane c)
      当从JEditorPane中移除工具包时调用。用于注销附加的任何侦听器。
      覆盖:
      deinstall 在类 StyledEditorKit
      参数:
      c - JEditorPane
    • setStyleSheet

      public void setStyleSheet(StyleSheet s)
      设置用于呈现各种HTML元素的样式集。这些样式根据CSS规范指定。由工具包生成的每个文档都将具有其自己的样式表副本,可以向其添加文档特定样式。默认情况下,指定的StyleSheet由所有HTMLEditorKit实例共享。如果需要,应重新实现此方法以提供更细粒度。
      参数:
      s - 样式表
    • getStyleSheet

      public StyleSheet getStyleSheet()
      获取当前用于呈现HTML元素的样式集。默认情况下,加载DEFAULT_CSS指定的资源,并由所有HTMLEditorKit实例共享。
      返回:
      样式表
    • getActions

      public Action[] getActions()
      获取编辑器的命令列表。这是由超类支持的命令列表,加上本地定义的用于样式操作的命令集合。
      覆盖:
      getActions 在类 StyledEditorKit
      返回:
      命令列表
    • createInputAttributes

      protected void createInputAttributes(Element element, MutableAttributeSet set)
      element的键/值复制到set的AttributeSet中。这不会复制组件、图标或元素名称属性。子类可能希望在此处细化要复制的内容。但请确保首先删除set中的所有属性。

      每当插入符号移动到不同位置时都会调用此方法。

      覆盖:
      createInputAttributes 在类 StyledEditorKit
      参数:
      element - 元素
      set - 属性
    • getInputAttributes

      public MutableAttributeSet getInputAttributes()
      获取用于样式编辑操作的输入属性。
      覆盖:
      getInputAttributes 在类 StyledEditorKit
      返回:
      属性集
    • 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

      public void setAutoFormSubmission(boolean isAuto)
      指定是否自动处理html表单提交还是仅触发FormSubmitEvent。默认情况下设置为true。
      参数:
      isAuto - 如果为true,则自动处理html表单提交。
      自版本:
      1.5
      参见:
    • clone

      public Object clone()
      创建编辑器工具包的副本。
      覆盖:
      clone 在类 StyledEditorKit
      返回:
      该副本
      参见:
    • getParser

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

      public AccessibleContext getAccessibleContext()
      返回与此编辑器工具包关联的AccessibleContext
      指定者:
      getAccessibleContext 在接口 Accessible
      返回:
      与此编辑器工具包关联的AccessibleContext
      自版本:
      1.4