1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java - JTextArea TextFarbe

Dieses Thema im Forum "OS X-Developer" wurde erstellt von MACRASSI, 31.07.08.

  1. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    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...
     
  2. nevermind

    nevermind Bismarckapfel

    Dabei seit:
    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.
     
  3. YanniH

    YanniH Auralia

    Dabei seit:
    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
     
  4. lol

    lol Uelzener Rambour

    Dabei seit:
    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).
     
  5. nevermind

    nevermind Bismarckapfel

    Dabei seit:
    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) {}
        }
    }
     
    MACRASSI gefällt das.
  6. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    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
     

Diese Seite empfehlen