我创建了一个使用 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();
答案 0 :(得分:7)
我甚至会对光标突出显示优先于突出显示对象的突出显示感到满意
JTextPane textPane = new JTextPane(...);
DefaultHighlighter highlighter = (DefaultHighlighter)textPane.getHighlighter();
highlighter.setDrawsLayeredHighlights(false);
答案 1 :(得分:0)
我构建了非选择的自定义突出显示颜色,其透明度为alpha值(默认为完全不透明度):
Color myColor = new Color( rValFloat, gValFloat, bValFloat, alpha);
这不能让我完全控制重叠区域的颜色,因为突出显示是光标突出显示和上面我的颜色的混合,但我也可以用以下颜色更改光标的选择颜色:
textPane.setSelectionColor(mySelectionColor);
这足以控制我的目的。