# Einzelnen Worte eines Strings farbig machen



## dalco (19. Jun 2008)

hallo,

ich habe ein suchfunktion, die mir strings mit max 6 worten durchsucht, ob meine anfrage, also auch ein string, der zb. 3 worte hat, enthält.
es sind namen von kletterrouten, zb. "die alte westwand".
wenn ich jetzt nach "westwand" suche, will ich das ergebnis, den string in grauer farbe schreiben, nur das wort"westwand" darin soll rot werden.
suche ich nach "alte" und "westwand" sollen beide worte rot dargestellt werden.

wie mache ich das, von der darstellung her, könnten es labels in einem JPanel sein, oder eine einfache Paintcomponente, auf der ich den string mit g.drawstring().....    schreibe.
hier ist das problem, ich spitte ihn auf, um die worte zu checken, müsste dann die farbe setzen und ihn wieder zusammenbauen, aber an welche x-position, da die worte ja unterschiedlich lang sind.

ich weiß nicht weiter, dafür dass ich dachte das sei banal, da ich auf meine suche so stolz war, die ja funktioniert.

jedenfalls schon mal vielen dank für eure hilfen
mfg
dalco


----------



## SlaterB (19. Jun 2008)

ich glaube, das wird etwas kompliziert


http://entwickler-forum.de/archive/index.php/t-32007.html
http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html


----------



## Wildcard (19. Jun 2008)

Die einfachste Lösung ist sicherlich, dir einen html String zusammen zu bauen und diesen einem JLabel zu setzen.


----------



## Tom299 (19. Jun 2008)

also wenn deine suche schon mal funktioniert und du die wörter findest würd ich einfach einen html-tag dazumachen, der das wort entsprechend färbt oder fett darstellt oder wie auch immer.
vielleicht solltest du mit einer kopie der strings bzw. des ganzen textes arbeiten, damit du bei einer neuen suche nicht zuerst die alten html-tags dann entfernen mußt.


----------



## Wildcard (19. Jun 2008)

Das hier kann dir zB helfen:
http://java.sun.com/javase/6/docs/api/java/io/StreamTokenizer.html


----------



## Guest (19. Jun 2008)

danke einstweilen,
kannst du mir ein beispiel zeigen wie ich so einen html string basteln kann
danke
dalco


----------



## Quaxli (19. Jun 2008)

Andere Lösung wäre der DefaultHighlighter, wenn die Suche bei Dir schon funktioniert. So wirklich schwer ist das auch nicht. Anbei mal ein kleines Beispielprogramm, daß ich vor längerer Zeit mal zum Rumspielen zusammengebastelt habe. Im Beispiel wird halt nur der erste Treffer gesucht und nur eine Farbe verwendet und das Ganze ist in einer Klasse zusammen gepfercht, aber als Beispiel ausreichend.
DefaultHighlighter funktioniert halt nur mit Klassen, die von JTextComponent erben, wenn ich's richtig im Kopf habe.


```
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;

public class Demo extends JFrame implements ActionListener{

	private static final long	serialVersionUID	= 1L;
	
	JTextArea jtext;
	JTextField search;
	JButton start;
	DefaultHighlighter highlight;
	
	public static void main(String[] args) {
    new Demo();
	}
	
	public Demo(){
		setLocation(100,100);
		setSize(200,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
		
    JPanel top = new JPanel();		
		
    search = new JTextField(5);
    top.add(search);
    
    start = new JButton("search");
    start.setActionCommand("start");
    start.addActionListener(this);
    top.add(start);
    
    add(top,BorderLayout.NORTH);
    
    jtext = new JTextArea();
		highlight = new DefaultHighlighter();
		jtext.setHighlighter(highlight);
    add(jtext,BorderLayout.CENTER);
		
		setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		
		if(!e.getActionCommand().equals("start")){
			return;
		}

		if(search.getText().equals("")){
			return;
		}
		
		highlight.removeAllHighlights();
		
		String text = jtext.getText();
		int index = text.indexOf(search.getText());
		int length = search.getText().length();
		
		DefaultHighlighter.DefaultHighlightPainter highpaint = new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN);

		try {
			highlight.addHighlight(index,index+length,highpaint);
		} catch (BadLocationException e1) {
			e1.printStackTrace();
		}

	 repaint();
		
	}

}
```


----------



## Wildcard (19. Jun 2008)

```
String htmlString = "<html>Wort, [b]fettes Wort[/b]</html>"
```


----------



## Guest (19. Jun 2008)

hi,
danke aber soweit war ich auch schon:

```
String htmlString = "<html>Wort, [b]fettes Wort[/b]</html>"
```
wenn ich das in ein label oder ein textfield stecke, dann setzt er es genau so rein und nicht als interpretation der html-tags.
mfg
tino


----------



## SlaterB (19. Jun 2008)

Anonymous hat gesagt.:
			
		

> wenn ich das in ein label oder ein textfield stecke



Wildcard schrieb ja auch JLabel 

http://java.sun.com/docs/books/tutorial/uiswing/components/html.html


----------



## Guest (19. Jun 2008)

oh ja danke
mit JLabel seh ich was, werd versuchen jetzt meine farben reinzubekommen.
danke nochmal an alle
dalco


----------



## Guest (19. Jun 2008)

hallo nochmal,

also ich hab alles so hinbekommen wie ich es wollte.
danke und von mir aus ende des threads

mfg
dalco


----------

