HTMLDocument benutzung

Mortal_Shadow

Aktives Mitglied
Hi,

ich finde leider kein gutes Tutorial zum HTMLDocument.
Ich will in einem JTextPane html-Text darstellen - als Art chatprogramm.
Also wenn Client sendet <font color=\"#FF0000\">Text</font>, sollte hintendran "Text" in roter Schrift eingefügt werden.

Versucht habe ich etwas alla:[Java]
textPane.setContentType("text/html");
HTMLDocument doc = new HTMLDocument();
textPane.setDocument(doc);
//obiges als initialisierung

//bei Nachricht dann:
try{
doc.insertBeforeEnd(doc.getElement("html"), "<font color=\"#FF0000\">Roter Text</font>");
} catch (Exception e) {
e.printStackTrace();
}
[/Java]

Was mich verwirrt ist, dass ich zu jedem Einfügen ein Element angeben muss, selbst wenn dass Dokument noch leer ist.
Daher habe ich angenommen, dass die html-tags exestieren, was aber nicht so scheint, da ich eine Fehlermeldung bekomme:
java.lang.IllegalStateException: No HTMLEditorKit.Parser
at javax.swing.text.html.HTMLDocument.....

Wie mache ich das richtig?
 

Mortal_Shadow

Aktives Mitglied
Hmm, den Parser hab ich vergessen, aber es klappt trotzdem noch nicht.
Ich initialisiere nun so:
[Java]
textPane.setContentType("text/html");
//HTMLDocument doc = new HTMLDocument();
HTMLDocument doc = (HTMLDocument) new HTMLEditorKit().createDefaultDocument();
textPane.setDocument(doc);
HTMLEditorKit.Parser parser = new ParserDelegator();
doc.setParser(parser);
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
parser.parse(br, doc.getReader(0), true);
[/Java]

test.txt hat als Inhalt: <html>BLA</html>

Erstens wird das "BLA" nicht angezeigt und zweitens krieg ich bei einem aufruf von
doc.insertBeforeEnd(doc.getElement("<html>"), "<font color=\"#FF0000\">Rot</font>");
die Fehlermeldung:
java.lang.NullPointerException
at javax.swing.text.html.HTMLDocument.insertBeforeEnd(Unknown Source)

Haben tu ich das ganze - etwas abgewandelt von hier.


Edit: Ich hab das ganze nun so gelöst:
[Java]
//globales
private JTextPane textPane;
private JScrollPane textScroll;
private ArrayList<char[]> chatlog = new ArrayList<char[]>();

//Init
textPane = new JTextPane();
textScroll = new JScrollPane(textPane);
add(textScroll);
textPane.setEditable(false);
textScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
textPane.setContentType("text/html");
//noch Position+Größe, etc.

//Funktion die Nachricht hinzufügt
private synchronized void newChatMessage(String s){ //synchronized da Chatprogramm - multithreaded
boolean scrolledToEnd = false;
if(textScroll.getHeight() + textScroll.getViewport().getViewPosition().y +10 > textPane.getHeight()){
scrolledToEnd = true;
}
if(chatlog.size()+1 >= Optionen.maxChatlogSize()){ //Optionen ist bei mir eine Klasse die Konstanten speichert
chatlog.remove(0);
}
chatlog.add((s + "<br>").toCharArray());
int l = 0;
for(int i = 0; i<chatlog.size(); i++){
l += chatlog.get(i).length;
}
char[] output = new char[l];
l = 0;
for(int i = 0; i<chatlog.size(); i++){
System.arraycopy((chatlog.get(i)), 0, output, l, chatlog.get(i).length);
l += chatlog.get(i).length;
}
textPane.setText(String.valueOf(output));
if(scrolledToEnd){
textPane.setCaretPosition(textPane.getDocument().getLength());
}
}
[/Java]
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben