2

我正在尝试但未能理解如何使用 Java 的文本编辑器组件在插入文本时对其进行着色。我不想要或不需要功能齐全的语法高亮库。

基本上,我有一个 JTextField(或其他一些 JText... 组件)和一个单词列表。我希望列表中出现的字段中的任何单词为红色,其余单词为绿色。例如,如果“fire”在列表中,“fir”将显示为绿色,“fire”将显示为红色。

我尝试使用 JTextPane 和 DefaultStyledDocument,使用 KeyListener 浏览文档中的文本,并使用 AbstractStyledDocument.replace 将现有单词替换为具有正确属性的版本。这没有做任何事情。我究竟做错了什么?

4

1 回答 1

1

既不JTextPane JTextField不能呈现格式化文本,即具有多于一种格式的文本。对于您在写字板或 HTML 中发现的类似文本编辑器的功能,要使用的组件JEditorPaneJTextPane.

您可以做的最简单的事情是将 JEditorPane 的 ContentType 设置为“text/html”,并将其文本设置为包含 HTML 的字符串。Java 结构化文本组件出奇地胜任 HTML;您可以显示表格和/或 DIV,并且支持大部分 CSS2。内联样式最简单,但您甚至可以执行外部样式href

如果您想以编程方式获得幻想,您可以访问DocumentModel并从具有自己格式的文本范围中创建文本。DocumentModel 本质上就像一个可编程的文本编辑器。


编辑:重新阅读您的问题,我发现我的答案并没有完全解决它。由于您想要多色文本 JEditorPane 是您唯一的选择;但不仅仅是通过 HTML 或其他方式输入预先着色的文本,您必须在文档模型上放置一个侦听器,以捕获您键入时引入的更改;并且在每次文档更改后,您都需要检查文本(再次来自 Document 模型)是否应该突出显示的文本,并且您需要将格式应用于某些文本运行。

细节中有魔鬼,但这应该让你开始。

于 2010-07-04T18:58:45.910 回答