我有一个字符串的ArrayList,它显示在文本区域中,我试图在每次调用此方法时沿着一个单词移动荧光笔,但它会一直突出显示前一个单词,因为它是一个重复的单词,而不是下一个。这是我的代码:
ArrayList<String> words = new ArrayList<String>();
words.add("Word1"); //Keeps highlighting this one twice
words.add("Word2");
words.add("Word1"); //Instead of highlighting this one
words.add("Word3");
for(String other : words)
{
textArea.setText(textArea.getText() + "\n" + other);
}
int wordNum = 0;
String word = words.get(wordNum++);
Highlighter highlighter = textArea.getHighlighter();
HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.blue);
int p0 = textArea.getText().indexOf(word);
int p1 = p0 + word.length();
try
{
highlighter.removeAllHighlights();
highlighter.addHighlight(p0, p1, painter);
} catch (BadLocationException ex)
{
ex.printStackTrace();
return;
}
答案 0 :(得分:0)
由于您从 p0 突出显示为 p1 ,这意味着,从第一次出现 word 的第一个索引开始,您突出显示第一个这个词,不是第二个。为避免这种情况,请使用lastIndexOf()
代替indexOf()。
int p0 = textArea.getText().lastIndexOf(word);
int p1 = p0 + word.length();
现在,您将获得重复单词的最后一次出现,而不是第一次出现。
答案 1 :(得分:0)
如果要突出显示JTextArea的每个单词,请尝试使用此方法
Highlighter highlighter = jtextArea.getHighlighter();
DefaultHighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.blue);
int front=0;
public void highligtNextWord(JTextArea ta)throws Exception{
String str=ta.getText().trim()+" ";
int end=str.indexOf(" ",front);
highlighter.removeAllHighlights();
highlighter.addHighlight(front, end, painter);
if(end>=str.length()-1)
front=0;
else
front=end+1;
}