2

我创建了一个使用JTextPane的 Swing 界面。JTextPane 使用自定义颜色突出显示:

textPane.getHighlighter().addHighlight(startPos, endPos, highlightPainter); 

用户还能够以普通方式用光标突出显示文本。

我的问题是,我无法想出一种方法,将由荧光笔对象和光标选择突出显示的文本着色为第三种不同的颜色。高亮对象的高亮总是优先。

我尝试使用CaretListener对象,但它仅在用户手动突出显示后释放鼠标时触发事件。用户使用光标调整突出显示的区域时,我需要进行重叠渲染。

我什至会对光标突出显示优先于荧光笔对象的突出显示感到满意,但独特的重叠颜色是一个更可取的功能。

以下问题与我的类似:

如何使用 LayeredHighlighter - 一个突出显示在另一个之上

但唯一的答案只是链接到覆盖 GlassPane 的方法。但是,我更喜欢 JTextPane 或文档级解决方案,因为所选文本的值通过以下方式很重要

textPane.getSelectionStart();

textPane.getSelectionEnd();
4

2 回答 2

7

我什至会对光标突出显示优先于荧光笔对象的突出显示感到满意

JTextPane textPane = new JTextPane(...);
DefaultHighlighter highlighter =  (DefaultHighlighter)textPane.getHighlighter();
highlighter.setDrawsLayeredHighlights(false);
于 2013-08-21T01:16:54.610 回答
0

我使用透明度的 alpha 值构建了非选择的自定义突出显示颜色(默认为完全不透明):

Color myColor = new Color( rValFloat, gValFloat, bValFloat, alpha);

这并不能让我完全控制重叠区域的颜色,因为突出显示是光标突出显示和我上面的颜色的混合,但我也可以更改光标的选择颜色:

textPane.setSelectionColor(mySelectionColor);

这对我的目的来说已经足够控制了。

于 2013-08-26T00:03:23.907 回答