java可以显示HTML的组件JEditorPane 说明(转)

public class JEditorPane extends JTextComponent

可编辑各种内容的文本组件。有关基础知识信息和使用编辑器窗格的示例,请参阅 The Java Tutorial 中的 Using Text Components 一节。

此组件使用 EditorKit 的实现来完成其操作。对于给予它的各种内容,它能有效地将其形态变换为适当的文本编辑器种类。该编辑器在任意给定时间的内容类型都由当前已安装的 EditorKit 确定。如果将内容设置为新的 URL,则使用其类型来确定加载该内容所应使用的 EditorKit

默认情况下,已知下列内容类型:

text/plain
纯文本,即无法识别给定的类型时所使用的默认值。在此情况下使用的工具包是 DefaultEditorKit 的扩展,可生成有换行的纯文本视图。
text/html
HTML 文本。在此情况下使用的工具包是类 javax.swing.text.html.HTMLEditorKit,支持 HTML 3.2。
text/rtf
RTF 文本。在此情况下使用的工具包是类 javax.swing.text.rtf.RTFEditorKit,它提供了对多样化文本格式 (Rich Text Format) 的有限支持。

有多种方式可将内容加载到此组件中。

  1. 可使用 setText 方法来初始化字符串组件。在这种情况下,将使用当前的 EditorKit,且此类型为期望的内容类型。
  2. 可使用 read 方法来初始化 Reader 组件。注意,如果内容类型为 HTML,那么只有使用了 <base> 标记,或者设置了 HTMLDocument 上的 Base 属性时才能解析相关的引用(例如对于类似图像等内容)。在这种情况下,将使用当前的 EditorKit,且此类型为期望的内容类型。
  3. 可使用 setPage 方法来初始化 URL 组件。在这种情况下,将根据该 URL 来确定内容类型,并且设置为该内容类型所注册的 EditorKit

某些内容类型可能通过生成超链接事件来提供对超链接的支持。如果 JEditorPane不可编辑的(已调用了 JEditorPane.setEditable(false);),则 HTML EditorKit 将生成超链接事件。如果文档中嵌入了 HTML frame,则典型的响应是更改当前文档的某一部分。以下代码片段是一种可能的超链接侦听器实现,它特殊对待 HTML frame 事件,并且简单地显示其他所有已激活的超链接。

     class Hyperactive implements HyperlinkListener {
 
         public void hyperlinkUpdate(HyperlinkEvent e) {
             if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                 JEditorPane pane = (JEditorPane) e.getSource();
                 if (e instanceof HTMLFrameHyperlinkEvent) {
                     HTMLFrameHyperlinkEvent  evt = (HTMLFrameHyperlinkEvent)e;
                     HTMLDocument doc = (HTMLDocument)pane.getDocument();
                     doc.processHTMLFrameHyperlinkEvent(evt);
                 } else {
                     try {
                         pane.setPage(e.getURL());
                     } catch (Throwable t) {
                         t.printStackTrace();
                     }
                 }
             }
         }
     }

 

有关自定义如何呈现 text/html 的信息,请参阅 W3C_LENGTH_UNITSHONOR_DISPLAY_PROPERTIES

某些文档中与文化相关的信息是通过一种称为字符编码的机制来处理的。字符编码是字符集的成员(字母、象形文字、数字、符号或控制函数)和具体数字代码值的明确映射关系。它表示了文件的存储方式。字符编码有 ISO-8859-1、ISO-8859-5、Shift-jis、Euc-jp 和 UTF-8。将文件传递给用户代理 (JEditorPane) 时,该文件被转换为文档字符集 (ISO-10646 aka Unicode)。

有多种方式可获得使用 JEditorPane 时所用的字符集映射关系。

  1. 一种方式是将字符集指定为 MIME 类型的参数。通过调用 setContentType 方法来建立此方式。如果通过 setPage 方法加载内容,则其内容类型已根据 URL 的规范进行了设置。如果直接加载文件,则期望在加载前就已设置内容类型。
  2. 指定字符集的另一种方式是在该文档内指定。这需要在确定所需的字符集之前读取该文档。要处理此情况,需要 EditorKit.read 操作抛出将要被捕获的 ChangedCharSetException。然后使用新的 Reader 重新开始该 read 操作,该 Reader 使用 ChangedCharSetException(这是一个 IOException)中所指定的字符集。
换行
有关如何处理换行的讨论,请参阅 DefaultEditorKit

警告: Swing 不是线程安全的。有关更多信息,请参阅 Swing's Threading Policy

警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder。 

原文地址:https://www.cnblogs.com/taoweiji/p/2908781.html