JTextArea - Einzelne Teile färben

Klein0r

Erfahrenes Mitglied
Hallo!

Ich möchte in folgender Textarea verschiedene Bereiche färben. Zu dieser Textarea werden kontinuierlich Daten hinzugefügt. Ein nachträgliches Färben ist also zu aufwendig.
Java:
OutputWindowTA = new JTextArea();

Generell hätte ich es gerne so:

Java:
OutputWindowTA.setForeground(Color.red);
OutputWindowTA.append(WriteString);
OutputWindowTA.setForeground(Color.black);
OutputWindowTA.append(WriteString);

Das Problem ist aber, dass so immer die Farbe der gesamten TextArea geändert wird und nicht die der einzelnen Zeile gespeichert. Ist sowas möglich ohne sich dabei groß zu verrenken oder lässt das die TextArea so einfach nicht zu?

lg
 
Hallo,

schau dir mal die JTextPane an. Im Verzeichnis demo\jfc\Stylepad deines JDKs findest du ein Beispiel dazu.

MFG

zEriX
 
Hallo hallo,

das geht leider echt nur mit nem JTextPane...

Code:
  JTextPane pane = new JTextPane();
  pane.addText("magenta", "blau");

Code:
public void addText(String str1, String str2) {
  pane.getDocument().insertString(pane.getDocument().getLength(), str1, StyleConstant.MAGENTA);
  pane.getDocument().insertString(pane.getDocument().getLength(), str2, StyleConstant.BLUE);
}

und ein paar style constants definieren...

Code:
import java.awt.Color;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;

public class StyleConstant {
	
	private static final int FONTSIZE = 16;
	private static final String FONTFAMILY = "Helvetica";
	
    public static SimpleAttributeSet BLUE = new SimpleAttributeSet();
    public static SimpleAttributeSet MAGENTA = new SimpleAttributeSet();
	
    static {
		StyleConstants.setForeground(BLUE, Color.blue);
		StyleConstants.setFontFamily(BLUE, FONTFAMILY);
		StyleConstants.setFontSize(BLUE, FONTSIZE);
		
		StyleConstants.setForeground(MAGENTA, Color.magenta);
		StyleConstants.setFontFamily(MAGENTA, FONTFAMILY);
		StyleConstants.setFontSize(MAGENTA, FONTSIZE);
	}
}

Viele Grüße
Phil
 
Hey danke!

Das funktioniert soweit alles super :)
Bis auf den kleinen Fehler das es nicht
Code:
pane.addText("magenta", "blau");
heißen darf sondern
Code:
this.addText("magenta", "blau");

Habe das ganze noch nen bischen umgeschrieben so das ich bischen dynamischer bin was das schreiben in Farben angeht (komplette Zeilen)

Code:
	public void addText(String str1, SimpleAttributeSet set) {
		  try {
			OutputWindowTA.getDocument().insertString(OutputWindowTA.getDocument().getLength(), str1, (AttributeSet) set);
		} catch (BadLocationException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}
	}

So läuft alles - nur noch eine Frage:

Wie verhinder ich automatische Zeilenumbrüche und mache das ganze nach rechts scrollbar wenn die Zeile zu lang für das Fenster ist - sonst verliere ich total schnell die Übersicht bei dem ganzen Verfahren, da sehr lange Zeilen ausgegeben werden!

lg
 
Zurück