【发布时间】:2013-08-20 23:37:44
【问题描述】:
我创建了一个使用 JTextPane 的 Swing 界面。 JTextPane 使用自定义颜色突出显示:
textPane.getHighlighter().addHighlight(startPos, endPos, highlightPainter);
用户还可以以普通方式使用光标突出显示文本。
我的问题是,我无法找到一种方法,将由荧光笔对象和光标选择突出显示的文本着色为第三种不同的颜色。高亮对象的高亮总是优先。
我尝试使用 CaretListener 对象,但它仅在用户手动突出显示后释放鼠标时触发事件。我需要重叠来渲染 而 用户正在使用光标调整突出显示的区域。
我什至会很高兴光标突出显示优先于荧光笔对象的突出显示,但独特的重叠颜色是一个更可取的功能。
下面的问题和我的类似:
How to use LayeredHighlighter - One highlight on top of another
但唯一的答案只是链接到覆盖 GlassPane 的方法。但是,我更喜欢 JTextPane 或文档级解决方案,因为所选文本的值很重要,因为
textPane.getSelectionStart();
和
textPane.getSelectionEnd();
【问题讨论】:
-
我认为
CaretListener是不够的,它只会讲述事实“之后”的亮点。您可以将ChangeListener直接附加到Caret。查看this example了解更多详情