Java 在JTextField/JTextPane/中使单词具有不同的颜色?
我试图理解如何使用Java的文本编辑器组件在插入文本时为文本着色,但失败了。我不想要也不需要一个功能齐全的语法突出显示库 基本上,我有一个JTextField(或其他一些JText…组件)和一个单词列表。我希望列表中出现的字段中的任何单词都是红色的,其余单词都是绿色的。例如,如果“fire”在列表中,“fir”将显示为绿色,“fire”将显示为红色 我尝试过使用JTextPane和DefaultStyledDocument,使用KeyListener查看文档中的文本,并使用AbstractStyledDocument.replace将现有单词替换为具有正确属性的版本。这没用。我做错了什么?无论是Java 在JTextField/JTextPane/中使单词具有不同的颜色?,java,user-interface,swing,jtextpane,Java,User Interface,Swing,Jtextpane,我试图理解如何使用Java的文本编辑器组件在插入文本时为文本着色,但失败了。我不想要也不需要一个功能齐全的语法突出显示库 基本上,我有一个JTextField(或其他一些JText…组件)和一个单词列表。我希望列表中出现的字段中的任何单词都是红色的,其余单词都是绿色的。例如,如果“fire”在列表中,“fir”将显示为绿色,“fire”将显示为红色 我尝试过使用JTextPane和DefaultStyledDocument,使用KeyListener查看文档中的文本,并使用AbstractSty
JTextPane
还是JTextField
都不能显示格式化文本,即具有多个格式的文本。对于写字板或HTML中类似文本编辑器的功能,要使用的组件是JEditorPane
或其后代JTextPane
您可以做的最简单的事情是将JEditorPane的ContentType设置为“text/html”,并将其文本设置为包含html的字符串。Java结构化文本组件惊人地能够处理HTML;您可以显示表和/或div,并且支持许多CSS2。内联样式最简单,但您甚至可以执行外部样式href
s
如果您想以编程的方式获得乐趣,可以访问DocumentModel
,并从具有各自格式的文本范围中创建文本。DocumentModel的工作原理基本上类似于可编程文本编辑器
编辑:重读你的问题,我发现我的答案并没有完全解决这个问题。因为您需要多色文本,所以只有一个选项是文本窗格;但是,除了通过HTML或类似的方式在预先着色的文本中进行管道传输之外,您还必须在文档模型上设置一个侦听器,以捕获键入时引入的更改;在每次文档更改之后,您需要检查文本(再次来自文档模型)是否应该突出显示,并且您需要对某些文本运行应用格式
细节中有魔鬼,但这应该让您开始。困难在于,我需要在用户键入文本时动态进行着色。因此,我不需要创建文本,只需要在编写过程中对其进行着色。我编辑的内容(水平线以南)应该会对您有所帮助。通过收听模型,您可以根据自己的喜好对任何新的/更改的文本进行着色,从而做出响应。