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) 的有限支持。
有多种方式可将内容加载到此组件中。
- 可使用
setText
方法来初始化字符串组件。在这种情况下,将使用当前的EditorKit
,且此类型为期望的内容类型。 - 可使用
read
方法来初始化Reader
组件。注意,如果内容类型为 HTML,那么只有使用了 <base> 标记,或者设置了HTMLDocument
上的 Base 属性时才能解析相关的引用(例如对于类似图像等内容)。在这种情况下,将使用当前的EditorKit
,且此类型为期望的内容类型。 - 可使用
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_UNITS
和 HONOR_DISPLAY_PROPERTIES
某些文档中与文化相关的信息是通过一种称为字符编码的机制来处理的。字符编码是字符集的成员(字母、象形文字、数字、符号或控制函数)和具体数字代码值的明确映射关系。它表示了文件的存储方式。字符编码有 ISO-8859-1、ISO-8859-5、Shift-jis、Euc-jp 和 UTF-8。将文件传递给用户代理 (JEditorPane
) 时,该文件被转换为文档字符集 (ISO-10646 aka Unicode)。
有多种方式可获得使用 JEditorPane
时所用的字符集映射关系。
- 一种方式是将字符集指定为 MIME 类型的参数。通过调用 setContentType 方法来建立此方式。如果通过 setPage 方法加载内容,则其内容类型已根据 URL 的规范进行了设置。如果直接加载文件,则期望在加载前就已设置内容类型。
- 指定字符集的另一种方式是在该文档内指定。这需要在确定所需的字符集之前读取该文档。要处理此情况,需要
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
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构