I have to highlight the all occurrences of a word in JEditorPane
. For this I am using the following code:
try
{
javax.swing.text.DefaultHighlighter.DefaultHighlightPainter highlightPainter =
new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
textPane.getHighlighter().addHighlight(startPos, endPos,
highlightPainter);
}
catch(Exception ex)
{
}
But how can I give the position of index of a word?
I am reading the content from file but it is reading the HTML tags also and it is disturbing the index of words.
Basically, you should be able to walk the document looking for the match(es) you need...
public class TestEditorPane01 {
public static void main(String[] args) {
new TestEditorPane01();
}
public TestEditorPane01() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JEditorPane editor = new JEditorPane();
try {
editor.setPage(new File("Test.html").toURI().toURL());
} catch (Exception exp) {
exp.printStackTrace();
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(editor));
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Document document = editor.getDocument();
try {
String find = "Method";
for (int index = 0; index + find.length() < document.getLength(); index++) {
String match = document.getText(index, find.length());
if (find.equals(match)) {
javax.swing.text.DefaultHighlighter.DefaultHighlightPainter highlightPainter =
new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
editor.getHighlighter().addHighlight(index, index + find.length(),
highlightPainter);
}
}
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
});
}
}
This will walk the entire document and highlight all the matches. This is also a case sensitve match ;)