• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

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...
 
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.
 
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
 
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).
 
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
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