• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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