JTextPane中重叠突出显示的文本颜色

时间:2013-08-20 23:37:45

标签: java swing jtextpane

我创建了一个使用 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();

2 个答案:

答案 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);

这足以控制我的目的。