Można też tak:
public void highlight() {
try {
Highlighter.HighlightPainter hp = new DefaultHighlighter.DefaultHighlightPainter( colorChooser.showDialog(this, "Kolor", Color.getColor(null)) );
h.removeAllHighlights();
String text = area.getText();
String szukaj = pole.getText();
Pattern p = Pattern.compile(szukaj);
Matcher m = p.matcher(text);
while (m.find()) {
int start = m.start();
int end = m.end();
h.addHighlight(start, end, hp);
}
} catch (BadLocationException ble) {
System.err.println(ble);
}
}
ale lepiej to zrobić za pomocą osobnego przycisku bo inaczej będziemy wybierać kolor za każdym razem
czyli:
naszButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Color color = JColorChooser.showDialog(naszButton,"Kolor", Color.getColor(null));
hp = new DefaultHighlighter.DefaultHighlightPainter( color );
}
});
ale wcześniej jako zmienna globalna musimy zadeklarować:
Highlighter.HighlightPainter hp;
bo inaczej nasza metoda highlight() jej nie zobaczy.
A jeśli na dodatek usuniemy h.removeAllHighlights() - o tak:
public void highlight() {
try {
// h.removeAllHighlights();
String text = area.getText();
String szukaj = pole.getText();
Pattern p = Pattern.compile(szukaj);
Matcher m = p.matcher(text);
while (m.find()) {
int start = m.start();
int end = m.end();
h.addHighlight(start, end, hp);
}
} catch (BadLocationException ble) {
System.err.println(ble);
}
}
To dla każdego nowego wyszukiwania podświetlą nam się słowa w kolorach jakie sobie wybierzemy :P
Edit: wersja uaktualniona:)
public void highlight() {
// h.removeAllHighlights();
Pattern p = Pattern.compile(pole.getText().toLowerCase());
Matcher m = p.matcher(area.getText().toLowerCase());
while (m.find()) {
try {
if (hp == null) {
h.addHighlight(m.start(), m.end(), DefaultHighlighter.DefaultPainter);
} else h.addHighlight(m.start(), m.end(), hp);
} catch (BadLocationException ble) {
System.err.println(ble);
}
}
}