【发布时间】:2015-01-02 04:02:09
【问题描述】:
很抱歉问这个问题,因为还有一些关于同一主题的其他帖子,但我只是没有设法将这些解决方案应用于我的问题。
简单的场景。我有一个JTextPane,我有一个搜索方法。它检测所有匹配的单词并将它们突出显示为灰色。为了浏览不同的比赛,我有第二个荧光笔,它突出显示当前的“活动”比赛红色。通过按下按钮,活动突出显示到下一场比赛。 (基本上 chromes 搜索的工作原理)
除了删除旧的活动荧光笔外,一切正常。有一个名为 .removeHighlight() 的方法,我需要删除旧的高亮显示,但无论我插入什么作为参数,我都会遇到异常或没有任何反应。我会使用.removeAllHighlights(),但因为我有其他亮点(突出显示所有命中灰色)我会松开它们,所以我只需要删除最后一个活动的亮点。
官方 oracle 文档对 removeHighlight(hilites[i]) 做了一些事情,但老实说,我不知道那里发生了什么。
这里是我目前得到的代码:
private DefaultHighlightPainter highlightOne = new DefaultHighlightPainter(Color.RED);
private Object last;
public void paintAt(int pos){
try {
if (last != null){
motherFrame.tField.getHighlighter().removeHighlight(last);
}
last = motherFrame.tField.getHighlighter().addHighlight(pos, pos + searchWordLength, highlightOne);
} catch (BadLocationException e) {
//TODO
}
}
还有一张照片:
更新 这是一个可运行的:(对不起,混乱的代码。)
http://hostcode.sourceforge.net/view/2563 和 http://hostcode.sourceforge.net/view/2564
【问题讨论】: