Ich mißbrauche ein JTextPane als Ausgabekonsole und möchte nun auch mehrfarbige Texte in die Konsole ausgeben. So eine Art primitives Syntax-Coloring, aber nur als Konsolenausgabe,
So wie ich das sehe, gibt es dafür nur zwei Möglichkeiten:
1) StyleAttribut setzten, Text einer Farbe ausgeben, StyleAttribut setzen, Text in anderer Farbe usw.
2) Text schwarz ausgehen und dann mittels document.setCharacterAttributes() zusammenhängende Textstücke jeweils in einer Frabe einfärben. Für andere Textstücke/Farben wiederholen.
Beides erscheint mir schrecklich aufwendig und unperformant. Am liebsten würde ich die verschiedenen Farbattribute bereits in den String einfügen und dann einmalig per document.insertString() o.ä. ausgeben.
Also mal als prinzipielles Beispiel:
String out = Attribut.rot + "roter Text " + Attribut.blau + "blauer Text".
Das ist aber mit den Standard-Textfeldern in Swing offensichtlich nicht möglich. Zudem ist insbesondere JTextPane für eine Konsole eigentlich zu langsam. Das Einfügen von sehr großen Texten führt auch gerne mal zum Absturz. Eine Konsole sollte auch die Möglichkeit haben, nur N Zeilen der Ausgabe im Speicher zu halten. Eine TextPane kann man zwar einfach auf X Zeichen begrenzen, aber nur sehr schwer auf Y Zeilen.
Gibt es eventuell eine (frei verfügbare) Ersatzkomponente, die diese Probleme löst? Möchte das nicht unbedingt ohne Not selber schreiben...
So wie ich das sehe, gibt es dafür nur zwei Möglichkeiten:
1) StyleAttribut setzten, Text einer Farbe ausgeben, StyleAttribut setzen, Text in anderer Farbe usw.
2) Text schwarz ausgehen und dann mittels document.setCharacterAttributes() zusammenhängende Textstücke jeweils in einer Frabe einfärben. Für andere Textstücke/Farben wiederholen.
Beides erscheint mir schrecklich aufwendig und unperformant. Am liebsten würde ich die verschiedenen Farbattribute bereits in den String einfügen und dann einmalig per document.insertString() o.ä. ausgeben.
Also mal als prinzipielles Beispiel:
String out = Attribut.rot + "roter Text " + Attribut.blau + "blauer Text".
Das ist aber mit den Standard-Textfeldern in Swing offensichtlich nicht möglich. Zudem ist insbesondere JTextPane für eine Konsole eigentlich zu langsam. Das Einfügen von sehr großen Texten führt auch gerne mal zum Absturz. Eine Konsole sollte auch die Möglichkeit haben, nur N Zeilen der Ausgabe im Speicher zu halten. Eine TextPane kann man zwar einfach auf X Zeichen begrenzen, aber nur sehr schwer auf Y Zeilen.
Gibt es eventuell eine (frei verfügbare) Ersatzkomponente, die diese Probleme löst? Möchte das nicht unbedingt ohne Not selber schreiben...