文档

Java™ 教程
隐藏目录
如何使用编辑器面板和文本面板
Trail: 使用 Swing 创建 GUI
Lesson: 使用 Swing 组件
Section: 如何使用各种组件

如何使用编辑器面板和文本面板

有两个 Swing 类支持样式文本:JEditorPane 类及其子类 JTextPane 类。JEditorPane 类是 Swing 样式文本组件的基础,它提供了一种机制,可以添加对自定义文本格式的支持。如果您只需要无样式文本,请使用文本区域。

您可以通过运行 TextSamplerDemo 来查看编辑器面板和文本面板的使用情况。下面是 TextSamplerDemo 示例的图片。

提供每个 Swing 文本组件的示例的应用程序

点击“启动”按钮以使用 Java™ Web Start 下载 JDK 7 或更高版本)运行 TextSamplerDemo。或者,要自行编译并运行示例,请参考 示例索引

启动 TextSamplerDemo 应用程序

TextSamplerDemo 示例只是初步展示了编辑器面板和文本面板的功能。然而,右上角的编辑器面板展示了一项方便易用的功能:它显示从 URL 加载的不可编辑的帮助信息。右下角的文本面板演示了您可以轻松地将图像甚至组件直接嵌入文本面板中。


注意: 

如果您需要一个完整的帮助系统,请查看 javahelp 项目。


Swing 文本 API 功能强大且庞大,我们可以为使用编辑器面板和文本面板编写一本专门的书籍。本节介绍它们的功能,提供了何时使用哪种组件的提示,并指向其他信息来源。

使用编辑器面板显示来自 URL 的文本

您可以在不了解 Swing 文本系统的情况下完成显示来自 URL 的文本的任务。下面是 TextSamplerDemo.java 中的代码,它创建一个不可编辑的编辑器面板,用于显示使用 HTML 标签格式化的文本。

JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
java.net.URL helpURL = TextSamplerDemo.class.getResource(
                                "TextSamplerDemoHelp.html");
if (helpURL != null) {
    try {
        editorPane.setPage(helpURL);
    } catch (IOException e) {
        System.err.println("Attempted to read a bad URL: " + helpURL);
    }
} else {
    System.err.println("Couldn't find file: TextSamplerDemoHelp.html");
}

//Put the editor pane in a scroll pane.
JScrollPane editorScrollPane = new JScrollPane(editorPane);
editorScrollPane.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
editorScrollPane.setPreferredSize(new Dimension(250, 145));
editorScrollPane.setMinimumSize(new Dimension(10, 10));

该代码使用默认构造函数创建编辑器面板,然后调用 setEditable(false) 方法,以使用户无法编辑文本。接下来,代码创建 URL 对象,并使用它调用 setPage 方法。

setPage 方法打开 URL 指向的资源,并确定文本的格式(在示例中为 HTML)。如果已知文本格式,则编辑器面板会使用在 URL 找到的文本进行初始化。标准的编辑器面板可以理解普通文本、HTML 和 RTF。请注意,页面可能是异步加载的,这会保持 GUI 的响应性,但意味着在调用 setPage 后不应依赖于数据已完全加载。

编辑器面板 vs 文本面板

为了使用编辑器面板和文本面板,您需要了解文本系统,该系统在 文本组件特性 中描述。有关编辑器面板和文本面板的一些事实分散在该部分中。在这里,我们再次列出这些事实,并提供更多细节。此信息应该帮助您了解编辑器面板和文本面板之间的区别,以及何时使用哪种组件。

使用文本面板的示例

下面是 TextSamplerDemo 示例中创建和初始化文本面板的代码。

String[] initString =
        { /* ...  fill array with initial text  ... */ };

String[] initStyles =
        { /* ...  fill array with names of styles  ... */ };

JTextPane textPane = new JTextPane();
StyledDocument doc = textPane.getStyledDocument();
addStylesToDocument(doc);

//Load the text pane with styled text.
try {
    for (int i=0; i < initString.length; i++) {
        doc.insertString(doc.getLength(), initString[i],
                         doc.getStyle(initStyles[i]));
    }
} catch (BadLocationException ble) {
    System.err.println("Couldn't insert initial text into text pane.");
}

简要地说,此代码将初始文本硬编码到一个数组中,并将多个样式(表示不同段落和字符格式的对象)硬编码到另一个数组中。接下来,代码循环遍历数组,将文本插入文本面板,并指定要用于插入文本的样式。

尽管这是一个有趣的示例,可以简洁地演示 JTextPane 的几个特性,但“真实世界”的程序不太可能以这种方式初始化文本面板。相反,程序将使用编辑器面板保存文档,然后使用该文档初始化文本面板。

编辑器面板和文本面板 API

此部分列出了与编辑器面板和文本面板相关的一些 API。许多与 JEditorPane 及其子类 JTextPane 最有用的方法是从 JTextComponent 类继承的。您可以在 文本组件 API 中找到 JTextComponent 的 API 表。还请参阅描述从 JComponent 继承的 API 的 JComponent 类

从 URL 显示文本的 JEditorPane API
方法或构造函数 描述
JEditorPane(URL)
JEditorPane(String)
创建加载指定 URL 处文本的编辑器面板。
setPage(URL)
setPage(String)
加载编辑器面板(或文本面板)中指定 URL 处的文本。
URL getPage() 获取编辑器面板(或文本面板)当前页面的 URL。
JTextPane API
方法或构造函数 描述
JTextPane()
JTextPane(StyledDocument)
创建文本面板。可选参数指定文本面板的模型。
StyledDocument getStyledDocument
setStyledDocument(StyledDocument)
获取或设置文本面板的模型。

使用文本面板和编辑器面板的示例

要开始使用文本,您可能想运行这些程序并检查其代码,以找到与您想要执行的操作类似的内容。

示例 描述位置 备注
TextSamplerDemo 使用文本组件 使用每个 Swing 文本组件。
TextComponentDemo 文本组件特性 提供一个自定义的文本面板。演示了许多文本组件特性,如撤消和重做、文档过滤器、文档侦听器、插入符更改侦听器,以及如何将编辑操作与菜单和键盘快捷键关联。
TreeDemo 如何使用树 使用编辑器面板显示从 HTML 文件加载的帮助。

通过 Using JavaFX UI Controls: HTML Editor 教程,了解如何在 JavaFX 中使用 HTML 编辑文本。


上一页:如何制作对话框
下一页:如何使用文件选择器