我试图在 jtextpane 中突出显示多个单词。但是,我只能突出显示找到的第一个实例。
String key = "are";
Highlighter h = test.outputPane.getHighlighter();
String text = test.outputPane.getText();
String arr[] = text.split("[\\p{Punct}\\s]+");
for (int i = 0; i < arr.length; i++) {
String temp = arr[i];
if (temp.equals(key)) {
try {
h.addHighlight(text.indexOf(temp), text.indexOf(temp) + temp.length(), DefaultHighlighter.DefaultPainter);
} catch (BadLocationException ex) {
Logger.getLogger(crawler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
最佳答案
问题是 text.indexOf(String)
仅“返回指定子字符串在该字符串中第一次出现的索引。”。您可以使用 text.indexOf(String, int)
,它也会“从指定的索引开始。”。
例如:
import javax.swing.*;
import java.awt.event.*;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.border.LineBorder;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
public class Example {
JTextPane textPane;
public Example() {
JFrame frame = new JFrame();
textPane = new JTextPane();
textPane.setText("are warehouse are arearea are rare");
hightlightAll("are");
frame.setContentPane(textPane);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private void hightlightAll(String word) {
Highlighter highlighter = textPane.getHighlighter();
String text = textPane.getText();
String[] words = text.split("[\\p{Punct}\\s]+");
int lastIndex = 0;
for (String str : words) {
lastIndex = text.indexOf(str, lastIndex);
int endIndex = lastIndex + str.length();
if (str.equals(word)) {
try {
highlighter.addHighlight(lastIndex, endIndex, DefaultHighlighter.DefaultPainter);
} catch (BadLocationException e) {
}
}
lastIndex = endIndex;
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Example();
}
});
}
}
关于java - jtextpane 突出显示仅突出显示第一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34180401/