java - 如何使用 LayeredHighlighter - 一个高亮显示在另一个之上

标签 java swing

我很难理解 LayeredHighlighter。我有两个亮点。 一个是在创建 textarea 区域时突出显示文本。另一个荧光笔是滚动文本时获得的高亮显示。

我遇到的问题是我用鼠标使用的突出显示不会与创建文本区域时设置的文本上的突出显示重叠。

下面是创建textarea时高亮显示的文字

Original highlight

当我使用鼠标突出显示整个文本时,它不会出现在顶部

With selection

我想我需要使用 LayeredHighlighter。我尝试通过 painter.paintLayer(...) 来使用它 我在创建灰色高光时使用了它。

有没有把我的灰色高亮设置到后面,这样当我选择整行时,我的鼠标蓝色高亮会出现在它上面?所以整条线应该是蓝色的

谢谢 :)

最佳答案

Core Swing book, page 262 ,有一些关于语义的文档(与 API 引用不同)。它似乎归结为一个只有两层的系统。除了使用不是 LayeredHighlighter.LayerPainterHighlighter.HighlightPainter(有点反-直观的设计模式)与使用一个。第一种类型的高光画家将先行(以任意顺序)。然后是所有的 LayerPainter。同样以任意顺序,但我们可以猜测首先绘制选择高光(它使用 LayerPainter),然后在顶部绘制其他 LayerPainter 高光。

因此(对我有用的)解决方案是使用 Highlighter.HighlightPainter 添加高光。确保它不是 LayeredHighlighter.LayerPainter;即可能使用直接从 Highlighter.HighlightPainter 派生的匿名类。不要使用 DefaultHighlighter.DefaultHighlightPainter,因为它是 LayeredHighlighter.LayerPainter 的子类。但也许您的 Highlighter.HighlightPainter 实现可以保留对 DefaultHighlighter.DefaultHighlightPainter 实例的引用,并将 paint(..) 请求转发给它——这样就避免了从头开始编写绘画代码。这将解决所说明的问题,因为每当重新绘制 View 的一部分时,此 HighlightPainter - 而不是 - LayerPainter 将在选择 HighlightPainter-是-LayerPainter。 (请注意,使用什么Highlighter,是否使用Layered并不重要,只有特定高亮的HighlightPainter。)

(现在,就我而言,我还对通过选择高亮显示底层高亮感兴趣。我通过使用半透明选择颜色做到了这一点:jtextpane.setSelectionColor(Color(80, 120, 255, 100)).)

关于java - 如何使用 LayeredHighlighter - 一个高亮显示在另一个之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083206/

相关文章:

java - 开发与 EJB 通信的 JTable

java - 如何从 Android 中的 MediaPlayer 获取音频流

java - 谷歌应用程序引擎和Java : upload files into the blobstore

java - 我应该在循环之前还是循环中创建对象 "Random r"

java - 如何知道您在 JComboBox 中选择的内容

java - 为什么 GridBagLayout 会强制我的组件具有一定的高度?

java - 抛硬币游戏保存问题

java - 代码正在生成灰色屏幕

java - 具有自动高度的多行 JTable 单元格 - 第一行超大

java - JTable 错误 : java. lang.ArrayIndexOutOfBoundsException: 1 >= 0