我有这段代码:
JTextArea textComp;
Highlighter hilite = textComp.getHighlighter();
if (word.toString().equals(pattern[i]))
{
hilite.addHighlight(posStart, (posEnd), myHighlighter);
break;
}
word
是StringBuilder
假设if
中的条件匹配且hilite.addHighlight(posStart, (posEnd), myHighlighter);
- 此语句将执行。
然后textComp
包含
int myVar
我试着像这样突出
int myVar
那时,posStart = 0
和posEnd = 3
。但是当我在textArea
进入某个东西时,荧光笔会像这样延伸到最后:
int myVar
任何人都可以帮我吗?
如果我发表声明:
hilite.addHighlight(posStart, (posEnd-1), myHighlighter);
然后使用posStart=0, posEnd=3
,然后只有
在 * t myVar中* 有时候是这样的。即" in"突出显示但是" t"不是!
修改 功能:
Highlighter.HighlightPainter myHighlighter = new MyHighlightPainter(
Color.LIGHT_GRAY);
try {
Highlighter hilite = textComp.getHighlighter();
Document doc = textComp.getDocument();
String text = doc.getText(0, doc.getLength());
String[] words = text.split(" ");
int posEnd, posStart = 0;
while (text.length() > posStart) {
posEnd = posStart;
StringBuilder word = new StringBuilder();
while (posEnd < text.length() && text.charAt(posEnd) != ' ') {
word.append(text.charAt(posEnd++));
}
for (int i = 0; i < pattern.length; i++) {
if (word.toString().equals(pattern[i])) {
hilite.addHighlight(posStart, (posEnd-1), myHighlighter);
break;
}
}
posStart = posStart + posEnd + 1;
}
} catch (BadLocationException e) {
}
答案 0 :(得分:1)
实际上我想知道这款荧光笔是如何工作的!
是的,API令人困惑。我相信第一个索引是包容性的,最后一个索引是独占的。
每当我在搜索单词时突出显示,我都会使用以下代码:
String text = "one two three four...";
String search "three";
int offset = text.indexOf(search);
if (offset != -1)
textPane.getHighlighter().addHighlight(offset, offset + search.length(), painter);
答案 1 :(得分:0)
您的问题似乎并不是荧光笔如何突出显示文本,而是在编辑文本时突出显示如何变化。您可以通过向TextArea
添加更改侦听器并根据需要调整受影响的突出显示(使用changeHighlight()
)来处理此问题。
答案 2 :(得分:0)
我这样做是为了解决问题:
int wordEnd = 0, wordStart = 0;
Highlighter hilite = textComp.getHighlighter();
Document doc = textComp.getDocument();
String text = doc.getText(0, doc.getLength());
while (text.length() > wordEnd)
{
String word = new String();
if(text.charAt(wordEnd) == ' ')
{
word = text.substring(wordStart, wordEnd);
for (int i = 0; i < pattern.length; i++)
{
if (word.toString().equals(pattern[i]))
{
hilite.addHighlight(wordStart, (wordEnd), myHighlighter);
break;
}
}
wordStart = wordEnd + 1;
}
wordEnd++;
}
我所做的是通过检测后面的空格(你可以扩展逻辑)然后突出显示前一个单词来获得一个单词。通过打字,这是持续的。