• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java - JTextArea TextFarbe

MACRASSI

Gelbe Schleswiger Reinette
Registriert
21.11.04
Beiträge
1.754
Also, hier mein Problem.
Ich hab ne JTextAre, und in diese will in immer wieder Strings mittels append schreiben.
Jeder String soll aber ne andere Farbe haben.
Bisher habe ich nur was mit
txtArea_Send.setForeground()
gefunden.
Aber damit macht man ja den ganzen text in der TextArea in der Farbe.
Ich will aber, das die einzelnen strings andere fraben haben, die ich übergebe...
 

nevermind

Bismarckapfel
Registriert
19.12.07
Beiträge
142
Ich hab' die Docs jetzt nicht nochmal gelesen (ist schon etwas länger her), aber JTextArea kann glaub' nur Plaintext. Du brauchst dafür ein JTextPane. Ein Beispiel gibt's hier. Eine Alternative wäre vielleicht JTable oder JTree, die können glaub ich HTML.
 

YanniH

Auralia
Registriert
20.04.08
Beiträge
202
Sofenr du mit Swing arbeitest, was ich dir bei Java stark empfehlen würde, versuchs mal mit mit JEditorPane - das Ding unterstützt RTF und HTML.

HTH
 

lol

Uelzener Rambour
Registriert
26.01.07
Beiträge
366
Das sollte über setDocument() in der JTextArea machbar sein.
Du musst dir entweder eine eigene Klasse schreiben, die bunten Text darstellen kann und von Document erbt, oder dir eine raussuchen, die das schon kann.(bin mir ziemlich sicher, dass es da schon was gibt, siehe html-Rendering im JLabel und anderen).
 

nevermind

Bismarckapfel
Registriert
19.12.07
Beiträge
142
Hat mich jetzt doch interessiert. "Lol" hat recht. AbstractDocument und DefaultStyledDocument erben von Document und es funktioniert mit beiden.


Code:
import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class TextAreaDemo extends JFrame {
    
    JTextArea textArea;
    AbstractDocument doc;

    public static void main(String[] args) {
        final TextPaneDemo frame = new TextPaneDemo();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);      
        frame.addLines();
    }
    
    public TextAreaDemo() {
        textArea = new JTextArea();
        textArea.setDocument(doc);
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setPreferredSize(new Dimension(400, 400));
        getContentPane().add(scrollPane, BorderLayout.CENTER);
    }
    
    public void addLines() {
        try {
    	for (int i=0;i<50;i++) {
    		Random r = new Random();
    		Color c = new Color((1+Math.abs(r.nextInt())%255), (1+Math.abs(r.nextInt())%255), (1+Math.abs(r.nextInt())%255));
    		SimpleAttributeSet s = new SimpleAttributeSet();
                StyleConstants.setForeground(s, c);
    		this.doc.insertString(this.doc.getLength(), "blah" + "\n", s);
        	try { Thread.sleep(1000); } catch (InterruptedException e) {}
    	}
        } catch (BadLocationException e) {}
    }
}
 
  • Like
Reaktionen: MACRASSI

MACRASSI

Gelbe Schleswiger Reinette
Registriert
21.11.04
Beiträge
1.754
So, vielen dank an alle.
Ich habs jetzt hinbekommen =)
Hab einfach ne klasse von JTextPane erben lassen und dann noch so nen paar methoden selber geschrieben, so wie die append methode.
Dadurch musste ich dann mein programm nicht zu sehr umschreiben =)

Grüße Rasmus