Zmiana koloru Highlighter'a

0

Witam.
Potrzebuję zmienić kolor highlightera, tylko nie wiem jak. Próbowałem różnych sposobów ale nic z tego.
Potrzebuję jakiejś wskazówki.
Gdyby był ktoś tak uprzejmy i pokazał jak to zrobić...

Highlighter h = area.getHighlighter();
public void highlight() {

	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();

	    try {
		h.addHighlight(start, end, DefaultHighlighter.DefaultPainter);
	    } catch (BadLocationException ble) {
		System.err.println(ble);
	    }
	}
    } 
0

Już znalazłem jak to się robi tylko nie mogę utworzyć klasy bo po DefaultHighlighter(jak dam kropkę".").DefaultHighlightPainter <- pokazuje że nie mogę dodać DefaultHighlightPainter po kropce.

public class HiLiter extends DefaultHighlighter.DefaultHighlightPainter{
	public HiLiter (Color color){
	    super(color);
	    
    }
}
//potem tworzymy instancję
HiLiter p = new HiLiter(Color.red);
Highlighter h=textArea.getHighlighter();
// a potem
h.addhighlight(0,5,p);

pokazuje komunikat :required java.awt.Color;
found: no arguments.
reason: formal argument lists differ in lenght, ale nie przy addHighilghter tylko przy konstruktorze klasy.

Pomóżcie - bardzo proszę.

Kur.. te przykłady i wyjaśnienia w dokumentacji mnie dobijają - żeby nie można było znaleźć czegoś normalnego....eeeh

0

UDAŁO MI SIĘ !
Jak zwykle to prostsze niż się wydaje ale szukania co nie miara.


public void highlight() {
	
	Highlighter.HighlightPainter hp = new DefaultHighlighter.DefaultHighlightPainter( Color.red );  // ta linijka zmienia kolor i jest banalna 

	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();

	    try {
		h.addHighlight(start, end, hp);
	    } catch (BadLocationException ble) {
		System.err.println(ble);
	    }
	}
    } 

Dzięki :)

0

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);
	    }
	}
    } 

1 użytkowników online, w tym zalogowanych: 0, gości: 1