# JTextArea mit verschiedenen Textfarben



## Raikbit (13. Feb 2015)

Hi,

ich habe eine TextArea, welche Zeilenweise befüllt werden soll mit Zeilen, die ich woanders auslese.
Wenn die Zeilen ein gewisses Kriterium erfüllen sollen diese mit einer bestimmten Farbe in meine TextArea eingetragen werden. Leider übernimmt er immer für den gesammten Text die letzte Farbe, da ich nicht weis wie man effectiv Zeilen hintereinander einfügen kann.


```
String time = driver.findElement(By.xpath("//*[contains(@id, '"+b+"')]/td[6]")).getText();
	String name = driver.findElement(By.xpath("//*[contains(@id, '"+b+"')]/td[8]")).getText();
	if (time.equals("3")) {
		getOut().setForeground(Color.YELLOW);
	}
	if (time.equals("2")||time.equals("1")) {
		getOut().setForeground(Color.RED);
	}
	//getOut().setText(getOut().getText()+time+"    "+name+"\n");
	getOut().append(time+"    "+name+"\n");
```

ich steh auf dem Schlauch :rtfm:


----------



## BRoll (13. Feb 2015)

Das ganze textfeld hat nur eine Foreground color, die unabhängig vom Text ist. Die Textfarbe ist somit einfach immer der aktuelle wert von foreground, und nicht für einen bestimmten Inhalt aus dem Feld.


----------



## Raikbit (13. Feb 2015)

also ist es nicht möglich die Zeilen in unterschiedlichen Farben darzustellen?


----------



## BRoll (13. Feb 2015)

Mit dem Standard JTextArea jedenfalls nicht. Spontan wüsste ich nicht obs für sowas schon ein vorhandes gui element gibt, oder ob du dir was suchen / selbstschreiben musst.


----------



## Network (13. Feb 2015)

Es gibt JTextPane und JEditorPane als Alternative für größere editierbarkeit.

Eigentlich unterstützen alle Swing Elemente HTML Code oder sollten unterstützen, vielleicht mal damit probieren?


----------



## Raikbit (15. Feb 2015)

Super danke... HTML scheint zwar direkt auf Swing Elementen zu funktionieren aber nicht in Swing Elementen :noe:
ABER JTextPane sieht sehr vielversprechend aus. Das ist genau was ich brauche.


----------



## Raikbit (15. Feb 2015)

So habs geschaft... HTML war der falsche weg da ich dort nicht beliebig Zeilen anfügen konnte sondern nur ein komplettes HTML Document der TextPane übergeben konnte (oder ich hab mich einfach zu doof angestellt)

Also simple Lösung:

```
public void addText(JTextPane pane, String st, Color col){
	    StyleContext sc = StyleContext.getDefaultStyleContext();
	    AttributeSet as = sc.addAttribute(sc.getEmptySet(), StyleConstants.Foreground, col);
	    try {
	        Document doc = pane.getDocument();
	        doc.insertString(doc.getLength(), st, as);
	     } catch(BadLocationException e) {
	        getLog().setText(getLog().getText()+"\n"+e.printStackTrace());
	     }
	}
```
Die Methode macht genau das was ich sonst über setText(getText()+"text") getan habe nur das ich direkt meine verschiedenen TextPanes ansprechen kann und der String immer einen neuen Farbwert bekommen kann.

THX @ Network für die richtige Fährte


----------

