wie Schriftfarbe in JEditorPane verändern?

Hallo allerseits,
habe im Programm unten versucht, die Schriftfarbe einer Zeichenfolge auf rot zu setzen und im JEditorPane auszugeben mit:
String s ="<font colour=\"red\">Gut</font>";
doc.insertString(doc.getLength(), s, null);

Das funktioniert leider nicht.
Was muss ich machen, damit es klappt ?

mfg
Ernst

==================================00


Java:
package testweg;


import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLEditorKit;

public class Startklasse {

    public static void main(String[] args) {
        MyFenster myF = new MyFenster();
        //  Programm wird beendet (aus dem Arbeitsspeicher entfernt), wenn Fenster weggeklickt
        //  wird. Nachprüfen mit Task-Manager
        myF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

// Konstruktor
class MyFenster extends JFrame {
    private Container myCont;
    private JPanel myPan;
    private JButton myRenameButton;
    private JEditorPane myMeldung;
    private JScrollPane sp;
    private JLabel myMeldungenLabel;
    private GridBagLayout myGBL_10_1;
    public Document doc;

    public MyFenster() {
        String meldung;
        myCont = getContentPane();
        myPan = new JPanel();
        myRenameButton = new JButton("Start");
        meldung = "\nUmbenennen eines ganzen Verzeichnisbaums einschließlich der Dateien";
        meldung = meldung + "\nDieses Umbenennungsprogramm ist rekursiv und hat deshalb eine schlechetere Performance.";
        myMeldungenLabel = new JLabel("Meldungen des Programms:");
        myMeldung = new JEditorPane(new HTMLEditorKit().getContentType(),"");
        myMeldung.setText("<html> <center>"
                  + "<h1>Page not found</h1>"
                    + "</center> </html>.");

        doc = myMeldung.getDocument();
        String s ="<font colour=\"red\">Gut</font>";
        
        try {
            doc.insertString(doc.getLength(), s, null);             
            
        } catch (BadLocationException e) {
            System.out.println("War wohl nix");
        }
   
        
        myMeldung.setEditable(false);
        sp = new JScrollPane(myMeldung);
        sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        myGBL_10_1 = new GridBagLayout();
        addiereKopmonente(myGBL_10_1, myRenameButton, 0, 0, 1, 1, 1, 1);
        addiereKopmonente(myGBL_10_1, myMeldungenLabel, 0, 1, 1, 1, 1, 1);
        addiereKopmonente(myGBL_10_1, sp, 0, 2, 1, 8, 1, 20);
        myPan.setLayout(myGBL_10_1);
        myPan.add(myRenameButton);
        myPan.add(myMeldungenLabel);
        myPan.add(sp);
        myCont.add(myPan);
        setTitle("Ein Umbenennungsprogramm");
        setLocation(10, 200);
        setSize(800, 400);

        setVisible(true);
    }

    public void addiereKopmonente(GridBagLayout gbl, Component c, int x, int y, int width, int height, double weightx, double weighty) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbl.setConstraints(c, gbc);
        add(c);
    }

}
 
Danke für eure Tipps.
Aber so funktioniert es auch nicht:

String s ="<html><font color=\"red\">Gut</font></html>";


mfg
Ern
 
Java:
public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setSize(500,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JEditorPane pane = new JEditorPane();
    pane.setContentType("text/html");
    pane.setText("<font color=\"FF0000\">Foobar</font>");
    frame.add(pane);
    frame.setVisible(true);
}
 
Java:
public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setSize(500,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JEditorPane pane = new JEditorPane();
    pane.setContentType("text/html");
    pane.setText("<font color=\"FF0000\">Foobar</font>");
    frame.add(pane);
    frame.setVisible(true);
}
Danke für den Tipp. Es funktioniert!!
Ich will aber nicht nur einen Text setzen, sondern auch Text anfügen:

Mit

s ="<font color=\"FF0000\">Foobar</font>";
doc.insertString(doc.getLength(), s, null);

funktioniert das aber nicht.
Weisst du wie es geht ?

mfg
Ern
 
Sorry hatte gestern keine Zeit mehr.
Warum das mit JEditorPane nicht so recht klappen will, kann ich dir nicht sagen. Hab mit der Komponente noch nicht so viel rum gespielt. Bisher hab ich das immer (ohne Probleme) über JTextPane lösen können.
Java:
public class Test{
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        StyleContext sc = new StyleContext();
        DefaultStyledDocument doc = new DefaultStyledDocument(sc);
        JTextPane pane = new JTextPane(doc);

        final Style heading1Style = sc.addStyle("HeadingStyle", null);
        StyleConstants.setBold(heading1Style, true);
        StyleConstants.setFontSize(heading1Style, 16);
        StyleConstants.setUnderline(heading1Style, true);
        append("Überschrift 1", doc, heading1Style);

        final Style redColorStyle = sc.addStyle("RedColor", null);
        StyleConstants.setForeground(redColorStyle, Color.RED);

        append("\nRoter Text ", doc, redColorStyle);

        append("Normaler Text ", doc, null);

        final Style boldFontStyle = sc.addStyle("BoldFont", null);
        StyleConstants.setBold(boldFontStyle, true);

        append("Fetter Text", doc, boldFontStyle);

        frame.add(pane);
        frame.setVisible(true);
    }

    private static void append(String text, DefaultStyledDocument doc, Style style) {
        try {
            doc.insertString(doc.getLength(), text, style);
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }


}
 
Sorry hatte gestern keine Zeit mehr.
Warum das mit JEditorPane nicht so recht klappen will, kann ich dir nicht sagen. Hab mit der Komponente noch nicht so viel rum gespielt. Bisher hab ich das immer (ohne Probleme) über JTextPane lösen können.
Vielen Dank für deine Bemühungen.
Ich werde deinen Vorschlag gleich einbauen und ausprobieren.
Ich will nur farbigen Text in das Meldefenster anfügen.

Das folgende Programm funktioniert zwar mit JEditorPane, doch in meinem größerern Programm gibt komische Exceptions. Näheres dazu bringe ich später in einem anderen Posting.


Java:
package testweg;

import java.io.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

public class Startklasse {

    public static void main(String[] args) {
        MyFenster myF = new MyFenster();
        //  Programm wird beendet (aus dem Arbeitsspeicher entfernt), wenn Fenster weggeklickt
        //  wird. Nachprüfen mit Task-Manager
        myF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

// Konstruktor
class MyFenster extends JFrame {

    private Container myCont;
    private JPanel myPan;
    private JButton myRenameButton;
    private JEditorPane myMeldung;
    private JScrollPane sp;
    private JLabel myMeldungenLabel;
    private GridBagLayout myGBL_10_1;
    //private Document doc;
    private HTMLEditorKit kit;
    private HTMLDocument doc2;
    private HTMLDocument doc1;

    public MyFenster() {
        String meldung;

        myMeldung = new JEditorPane(new HTMLEditorKit().getContentType(), "");
        kit = new HTMLEditorKit();
        doc2 = new HTMLDocument();
        doc1 = (HTMLDocument) myMeldung.getDocument();

/*        
        myMeldung = new JEditorPane(new HTMLEditorKit().getContentType(), "");
        kit = new HTMLEditorKit();
        doc2 = new HTMLDocument();
        doc1 = (HTMLDocument) myMeldung.getDocument();
        
*/
        myCont = getContentPane();
        myPan = new JPanel();
        myRenameButton = new JButton("Start");
        meldung = "\nUmbenennen eines ganzen Verzeichnisbaums einschließlich der Dateien";
        meldung = meldung + "\nDieses Umbenennungsprogramm ist rekursiv und hat deshalb eine schlechetere Performance.";
        myMeldungenLabel = new JLabel("Meldungen des Programms:");
        String s = "<font color=\"FF0000\">Das ist ein farbiger Text</font>";

        try {
            myMeldung.setEditorKit(kit);
            myMeldung.setDocument(doc2);
            //HTMLDocument doc1 = (HTMLDocument) myMeldung.getDocument();
            doc1 = (HTMLDocument) myMeldung.getDocument();       
            int len1=doc2.getLength();
            System.out.println("len1="+len1);
            kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);
            int len2=doc2.getLength();
            System.out.println("len2="+len1);            
            kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);            
            //kit.insertHTML(doc, doc2.getLength(),, s, 0, 0, null);
        } catch (BadLocationException | IOException exc) {
            JOptionPane.showMessageDialog(this, exc.getMessage());
        }

        
        try {
            myMeldung.setEditorKit(kit);
            myMeldung.setDocument(doc2);
            //HTMLDocument doc1 = (HTMLDocument) myMeldung.getDocument();
            doc1 = (HTMLDocument) myMeldung.getDocument();            
            int len3=doc2.getLength();      
            System.out.println("len3="+len3);            
            kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);
            int len4=doc2.getLength(); 
            System.out.println("len4="+len4);            
            
            kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);            
            //kit.insertHTML(doc, doc2.getLength(),, s, 0, 0, null);
        } catch (BadLocationException | IOException exc) {
            JOptionPane.showMessageDialog(this, exc.getMessage());
        }
        
        
        //xxxxxxxxxxxxxxxxxxxxxxxx
        myMeldung.setEditable(false);
        sp = new JScrollPane(myMeldung);
        sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        myGBL_10_1 = new GridBagLayout();
        addiereKopmonente(myGBL_10_1, myRenameButton, 0, 0, 1, 1, 1, 1);
        addiereKopmonente(myGBL_10_1, myMeldungenLabel, 0, 1, 1, 1, 1, 1);
        addiereKopmonente(myGBL_10_1, sp, 0, 2, 1, 8, 1, 20);
        myPan.setLayout(myGBL_10_1);
        myPan.add(myRenameButton);
        myPan.add(myMeldungenLabel);
        myPan.add(sp);
        myCont.add(myPan);
        setTitle("Ein Umbenennungsprogramm");
        setLocation(10, 200);
        setSize(800, 400);

        setVisible(true);
    }

    public void addiereKopmonente(GridBagLayout gbl, Component c, int x, int y, int width, int height, double weightx, double weighty) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbl.setConstraints(c, gbc);
        add(c);
    }

}




}





package testweg;

import java.io.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

public class Startklasse {

public static void main(String[] args) {
MyFenster myF = new MyFenster();
// Programm wird beendet (aus dem Arbeitsspeicher entfernt), wenn Fenster weggeklickt
// wird. Nachprüfen mit Task-Manager
myF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}

// Konstruktor
class MyFenster extends JFrame {

private Container myCont;
private JPanel myPan;
private JButton myRenameButton;
private JEditorPane myMeldung;
private JScrollPane sp;
private JLabel myMeldungenLabel;
private GridBagLayout myGBL_10_1;
//private Document doc;
private HTMLEditorKit kit;
private HTMLDocument doc2;
private HTMLDocument doc1;

public MyFenster() {
String meldung;

myMeldung = new JEditorPane(new HTMLEditorKit().getContentType(), "");
kit = new HTMLEditorKit();
doc2 = new HTMLDocument();
doc1 = (HTMLDocument) myMeldung.getDocument();

/*
myMeldung = new JEditorPane(new HTMLEditorKit().getContentType(), "");
kit = new HTMLEditorKit();
doc2 = new HTMLDocument();
doc1 = (HTMLDocument) myMeldung.getDocument();

*/
myCont = getContentPane();
myPan = new JPanel();
myRenameButton = new JButton("Start");
meldung = "\nUmbenennen eines ganzen Verzeichnisbaums einschließlich der Dateien";
meldung = meldung + "\nDieses Umbenennungsprogramm ist rekursiv und hat deshalb eine schlechetere Performance.";
myMeldungenLabel = new JLabel("Meldungen des Programms:");
String s = "<font color=\"FF0000\">Das ist ein farbiger Text</font>";

try {
myMeldung.setEditorKit(kit);
myMeldung.setDocument(doc2);
//HTMLDocument doc1 = (HTMLDocument) myMeldung.getDocument();
doc1 = (HTMLDocument) myMeldung.getDocument();
int len1=doc2.getLength();
System.out.println("len1="+len1);
kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);
int len2=doc2.getLength();
System.out.println("len2="+len1);
kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);
//kit.insertHTML(doc, doc2.getLength(),, s, 0, 0, null);
} catch (BadLocationException | IOException exc) {
JOptionPane.showMessageDialog(this, exc.getMessage());
}


try {
myMeldung.setEditorKit(kit);
myMeldung.setDocument(doc2);
//HTMLDocument doc1 = (HTMLDocument) myMeldung.getDocument();
doc1 = (HTMLDocument) myMeldung.getDocument();
int len3=doc2.getLength();
System.out.println("len3="+len3);
kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);
int len4=doc2.getLength();
System.out.println("len4="+len4);

kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);
//kit.insertHTML(doc, doc2.getLength(),, s, 0, 0, null);
} catch (BadLocationException | IOException exc) {
JOptionPane.showMessageDialog(this, exc.getMessage());
}


//xxxxxxxxxxxxxxxxxxxxxxxx
myMeldung.setEditable(false);
sp = new JScrollPane(myMeldung);
sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
myGBL_10_1 = new GridBagLayout();
addiereKopmonente(myGBL_10_1, myRenameButton, 0, 0, 1, 1, 1, 1);
addiereKopmonente(myGBL_10_1, myMeldungenLabel, 0, 1, 1, 1, 1, 1);
addiereKopmonente(myGBL_10_1, sp, 0, 2, 1, 8, 1, 20);
myPan.setLayout(myGBL_10_1);
myPan.add(myRenameButton);
myPan.add(myMeldungenLabel);
myPan.add(sp);
myCont.add(myPan);
setTitle("Ein Umbenennungsprogramm");
setLocation(10, 200);
setSize(800, 400);

setVisible(true);
}

public void addiereKopmonente(GridBagLayout gbl, Component c, int x, int y, int width, int height, double weightx, double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = weightx;
gbc.weighty = weighty;
gbl.setConstraints(c, gbc);
add(c);
}

}
 
Wie versprochen das abgespeckte Demo-Programm von mir , das versucht einen farbigen Text in ein JEditorPane anzufügen.
Hier die kritische Stelle:
=========================================
String s = "<font color=\"FF0000\">Hallo Welt</font>";
// Die folgende Anweisung funktioniert noch!
fehlermeldungAnJEditorPane(s);
// Warum gibt es bei der folgenden Anweisunghier eine Exception:
// "Must insert new content into body element"
fehlermeldungAnJEditorPane(s);
=========================================
Das verstehe ich nicht.
Habe schon Einiges dazu probiert und rumgepfuscht.

Höre jetzt aber damit auf, weil es - Dank Robat - mit
JTextPane das farbige Anfügen von Text funktioniert!
Nochmals vielen Dank für deine Hilfe.

mfg
Ernst


Java:
package testdemofehler;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

public class Startklasse {
    public static void main(String[] args) {
        MyFenster myF = new MyFenster();
        myF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class MyFenster extends JFrame {
    private Container myCont;
    private JPanel myPan;
    private JButton myRenameButton;
    private JEditorPane myMeldung;
    private HTMLEditorKit kit;
    private HTMLDocument doc1;
    private HTMLDocument doc2;
    private JScrollPane sp;
    private JLabel myMeldungenLabel;

    private MyWanze myWanze;
    private GridBagLayout myGBL_10_1;

    public MyFenster() {
        String meldung;
        myMeldung = new JEditorPane(new HTMLEditorKit().getContentType(), "");
        kit = new HTMLEditorKit();
        doc2 = new HTMLDocument();
        doc1 = (HTMLDocument) myMeldung.getDocument();
        myCont = getContentPane();
        myPan = new JPanel();
        myRenameButton = new JButton("Start");
        meldung = "\nUmbenennen eines ganzen Verzeichnisbaums einschließlich der Dateien";
        meldung = meldung + "\nDieses Umbenennungsprogramm ist rekursiv und hat deshalb eine schlechetere Performance.";

        myMeldungenLabel = new JLabel("Meldungen des Programms:");
        myMeldung.setEditable(false);
        sp = new JScrollPane(myMeldung);
        sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        myGBL_10_1 = new GridBagLayout();
        addiereKopmonente(myGBL_10_1, myRenameButton, 0, 0, 1, 1, 1, 1);
        addiereKopmonente(myGBL_10_1, myMeldungenLabel, 0, 1, 1, 1, 1, 1);
        addiereKopmonente(myGBL_10_1, sp, 0, 2, 1, 8, 1, 20);
        myPan.setLayout(myGBL_10_1);
        myWanze = new MyWanze(myMeldung, kit, doc1, doc2);
        myRenameButton.addActionListener(myWanze);
        myPan.add(myRenameButton);
        myPan.add(myMeldungenLabel);
        myPan.add(sp);
        myCont.add(myPan);
        setTitle("Ein Umbenennungsprogramm");
        setLocation(10, 200);
        setSize(800, 400);
        setVisible(true);
    }

    public void addiereKopmonente(GridBagLayout gbl, Component c, int x, int y, int width, int height, double weightx, double weighty) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbl.setConstraints(c, gbc);
        add(c);
    }
}

class MyWanze implements ActionListener {
    public JEditorPane myMeldung;
    private HTMLEditorKit kit;
    private HTMLDocument doc1;
    private HTMLDocument doc2;

    public MyWanze(JEditorPane myMeldung, HTMLEditorKit kit, HTMLDocument doc1, HTMLDocument doc2) {
        this.myMeldung = myMeldung;
        this.kit = kit;
        this.doc1 = doc1;
        this.doc2 = doc2;
    }

    public void actionPerformed(ActionEvent ae) {
        FileOderDirectoryRename myF = new FileOderDirectoryRename(myMeldung, kit, doc1, doc2);
        myF.renameMenue(ae);
    }
}

class FileOderDirectoryRename {
    public JEditorPane myMeldung;
    private HTMLEditorKit kit;
    private HTMLDocument doc2;
    private HTMLDocument doc1;
    public int zaehler = 0;
    public int merke = 0;
    public Component comp[];


    public FileOderDirectoryRename(JEditorPane myMeldung, HTMLEditorKit kit, HTMLDocument doc1, HTMLDocument doc2) {
        this.myMeldung = myMeldung;
        this.kit = kit;
        this.doc1 = doc1;
        this.doc2 = doc2;
    }

    public void renameMenue(ActionEvent ae) {
        int j = 0;
        int option = 0;
        String throwString;
        String s = "<font color=\"FF0000\">Hallo Welt</font>";
        fehlermeldungAnJEditorPane(s);
        // Warum gibt es hier eine Exception:
        // "Must insert new content into body element"
        fehlermeldungAnJEditorPane(s);          // <--
    }

    public void fehlermeldungAnJEditorPane(String s) {
        try {
            int len = doc2.getLength();
            kit.insertHTML(doc1, doc2.getLength(), s, 0, 0, null);
        } catch (Throwable e) {
            e.printStackTrace();
            System.out.println("War wohl nixXXXXX");
        }
    }
}
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben