Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTextField/JTextPane/中使单词具有不同的颜色?_Java_User Interface_Swing_Jtextpane - Fatal编程技术网

Java 在JTextField/JTextPane/中使单词具有不同的颜色?

Java 在JTextField/JTextPane/中使单词具有不同的颜色?,java,user-interface,swing,jtextpane,Java,User Interface,Swing,Jtextpane,我试图理解如何使用Java的文本编辑器组件在插入文本时为文本着色,但失败了。我不想要也不需要一个功能齐全的语法突出显示库 基本上,我有一个JTextField(或其他一些JText…组件)和一个单词列表。我希望列表中出现的字段中的任何单词都是红色的,其余单词都是绿色的。例如,如果“fire”在列表中,“fir”将显示为绿色,“fire”将显示为红色 我尝试过使用JTextPane和DefaultStyledDocument,使用KeyListener查看文档中的文本,并使用AbstractSty

我试图理解如何使用Java的文本编辑器组件在插入文本时为文本着色,但失败了。我不想要也不需要一个功能齐全的语法突出显示库

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

我尝试过使用JTextPane和DefaultStyledDocument,使用KeyListener查看文档中的文本,并使用AbstractStyledDocument.replace将现有单词替换为具有正确属性的版本。这没用。我做错了什么?

无论是
JTextPane
还是
JTextField
都不能显示格式化文本,即具有多个格式的文本。对于写字板或HTML中类似文本编辑器的功能,要使用的组件是
JEditorPane
或其后代
JTextPane

您可以做的最简单的事情是将JEditorPane的ContentType设置为“text/html”,并将其文本设置为包含html的字符串。Java结构化文本组件惊人地能够处理HTML;您可以显示表和/或div,并且支持许多CSS2。内联样式最简单,但您甚至可以执行外部样式
href
s

如果您想以编程的方式获得乐趣,可以访问
DocumentModel
,并从具有各自格式的文本范围中创建文本。DocumentModel的工作原理基本上类似于可编程文本编辑器


编辑:重读你的问题,我发现我的答案并没有完全解决这个问题。因为您需要多色文本,所以只有一个选项是文本窗格;但是,除了通过HTML或类似的方式在预先着色的文本中进行管道传输之外,您还必须在文档模型上设置一个侦听器,以捕获键入时引入的更改;在每次文档更改之后,您需要检查文本(再次来自文档模型)是否应该突出显示,并且您需要对某些文本运行应用格式


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

困难在于,我需要在用户键入文本时动态进行着色。因此,我不需要创建文本,只需要在编写过程中对其进行着色。我编辑的内容(水平线以南)应该会对您有所帮助。通过收听模型,您可以根据自己的喜好对任何新的/更改的文本进行着色,从而做出响应。