2010-07-04 35 views
2

我在尝试并且无法理解如何使用Java的文本编辑器组件在插入时对文本着色。我不想或不需要全功能语法突出显示库。在JTextField/JTextPane中创建不同的颜色/?

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

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

回答

1

JTextPaneJTextField都不能呈现格式化文本,即具有多种格式的文本。对于像写字板或HTML中那样的文本编辑器功能,要使用的组件是JEditorPane或其后代JTextPane

你可以做的最简单的事情是将JEditorPane的ContentType设置为“text/html”,并简单地将其文本设置为包含HTML的字符串。 Java结构化文本组件对于HTML非常有效;您可以显示表格和/或DIV,并且支持大部分CSS2。最简单的做你的款式,但你甚至可以做外部风格href s。

如果您想以编程方式获得幻想,您可以访问DocumentModel并根据各自具有自己格式的文本跨度创建文本。 DocumentModel基本上像一个可编程的文本编辑器。


编辑:重读你的问题,我看到我的答案并不完全解决这一问题。既然你想要多彩文本JEditorPane是你唯一的选择,但不仅仅是通过HTML或其他方式在预先着色的文本中滚动,您必须在您的文档模型上放置一个侦听器来捕捉键入时引入的更改;并且在每次文档更改之后,您都需要检查文本(同样来自文档模型)以查找应该或不应该突出显示的文本,并且您需要将格式应用于某些文本运行。

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

+0

难点在于我需要在用户键入文本时随时进行这种着色。所以我不太需要创建文本,因为我一直在进行着色。 – Zarkonnen 2010-07-04 19:00:46

+0

从我的编辑(水平线以南)的东西应该可以帮到你。聆听模型后,您可以按照自己的喜好对任何新的/已更改的文本进行着色处理。 – 2010-07-04 19:07:32