Swing JTextPane sehr langsam

AMiGA

Bekanntes Mitglied
Hallo zusammen,

ich benutze ein JTextPane, um aufbereitete HTML-Dateien darzustellen. Die Dateien sind zwischen 500k und 2MB groß. Das JTextPane liegt auf einem scrollbaren Panel:

Java:
import java.awt.*;

import javax.swing.*;
import javax.swing.text.html.*;

public class MyPanel extends JScrollPane
{
    public MyPanel()
    {
        super();

        setAutoscrolls(true);
        
        JPanel panelText = new JPanel();
        panelText.setLayout(new BorderLayout());
        setViewportView(getPanelText());
        setSize(300, 200);
        getVerticalScrollBar().setBlockIncrement(100);
        getVerticalScrollBar().setUnitIncrement(10);
    }

    private JPanel getPanelText()
    {
        JPanel panelText = new JPanel();
        panelText.setLayout(new BorderLayout());
        panelText.add(getTextPane(), java.awt.BorderLayout.CENTER);
        return panelText;
    }
    
    private JTextPane getTextPane()
    {
        JTextPane textPane = new JTextPane();
        textPane.setContentType("text/html");
        textPane.setDocument(new HTMLDocument());
        textPane.setDoubleBuffered(true);
        textPane.setEditorKit(new HTMLEditorKit());
        textPane.setHighlighter(new LineHighlighter(Color.ORANGE));
        textPane.addMouseListener(new java.awt.event.MouseAdapter() 
        {
            @Override
            public void mousePressed(java.awt.event.MouseEvent e)
            {
//                listener.mouseClicked();
            }
        });
//        textPane.addCaretListener(new TextPaneCaretListener());
        return textPane;
    }

}

Wenn ich das JTextPane nun mit Daten fülle, dauert dies bis zu 5 Sekunden! Ich erstelle mir mittlerweile die HTML-Datei selber schon im Speicher (StringBuffer, der einen String von ca. 2.5 Mio. Zeichen ergibt), wodurch es minimal (0,3 Sekunden) schneller geworden ist. Aber letztendlich dauert das Einlesen immer noch viel zu lange.

Java:
//
textPane.getEditorKit().read(new StringReader(bigString), textPane.getDocument(), 0);
//

Hat vielleicht irgend jemand eine Idee, was ich falsch mache?

Gruß,
AMiGA
 

AMiGA

Bekanntes Mitglied
*schubs*

Hat niemand ähnliche Erfahrungen gemacht?

Gibt es vielleicht andere (performantere) Möglichkeiten, HTML-Dateien darzustellen?

Gruß,
AMiGA
 

AMiGA

Bekanntes Mitglied
Folgende Lösung macht auf mich den performantesten Eindruck:

Java:
HTMLDocument doc = new HTMLDocument();
new HTMLEditorKit().read(new StringReader(bigHtmlString), doc, 0);
textPane.setDocument(doc);

Der HTML-Inhalt wird zunächst als sehr großer String aufbereitet. Aus diesem wird ein HTML-Dokument erzeugt. Das Dokument selber wird nur noch an das JTextPane gehängt. Es ist immer noch relativ langsam aber schon etwas schneller als die vorherige Variante.

Gruß,
AMiGA
 

AMiGA

Bekanntes Mitglied
Ich bin immer noch nicht wirklich zufrieden mit der oben beschriebenen Variante. Alleine der Aufruf von
Java:
setDocument
dauert bei einem etwas größeren HTML-Dokument (angezeigt werden rund 10.000 Zeilen) ca. 2,7 Sekunden. Das ist nicht wirklich akzeptabel finde ich.

Kennt vielleicht jemand brauchbare Alternativen zu JTextPane? Eventuell freie Bibliotheken, welche die Funktionalität (HTML-String auf einem Panel darstellen) abbilden?

Gruß,
AMiGA
 

Verjigorm

Top Contributor
Ich hab jetzt nix ausprobiert, aber hast du einfach mal

Java:
 textPane.setText(bigHTMLString);

benutzt anstatt der ganzen komplexen Reader etc.?

edit: Stellt sich mir natürlich die Frage, was du alles für Funktionalitäten brauchst
 
Zuletzt bearbeitet:

AMiGA

Bekanntes Mitglied
Ich hab jetzt nix ausprobiert, aber hast du einfach mal
Java:
textPane.setText(bigHTMLString);
benutzt anstatt der ganzen komplexen Reader etc.?
Ja, das ist leider noch langsamer, da es intern das Document erweitert, was am JTextPane hängt. Schneller ist es, zunächst das Document zu erzeugen und es erst danach ans JTextPane zu hängen.

Stellt sich mir natürlich die Frage, was du alles für Funktionalitäten brauchst
Möchte gerne HTML darstellen (wird genutzt, um Logdateien farblich darzustellen). Per Popup möchte ich Zeilen anspringen können, etc, das wird aber alles drumherum programmiert, genau wie beim JTextPane.

Gruß,
AMiGA
 

AMiGA

Bekanntes Mitglied
Ich habe testweise DJNativeSwing (siehe The DJ project) genutzt, um den HTML-String darzustellen. Beim JTextPane dauerte es ca. 2,7 Sekunden, bei JWebBrowser dauert es ca. 0,1 Sekunden!

Leider habe ich dort keine Möglichkeit, die caret-Funktionalitäten (setCaretPosition, etc.) von JTextComponent zu nutzen. Daher weiß ich nicht, auf welche Zeile der Benutzer geklickt hat, kann die Zeile nicht markieren, kann keine Zeile anspringen, etc.

Jetzt stellt sich natürlich die Frage, ob man die Performance des JTextPanes nicht irgendwie verbessern kann. Der Unterschied zwischen 2,7 Sekunden und 0,1 Sekunden ist ja erheblich.

Gruß,
AMiGA
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
T JTextPane ignoriert HTML Zeilenumbruch <br> tag wegen eigenem HTMLEditorKit AWT, Swing, JavaFX & SWT 5
J Swing JTextpane aktuallisiert nicht den setText? AWT, Swing, JavaFX & SWT 9
M Strings im JTextPane vergleichen und mit StyledDocument formatieren AWT, Swing, JavaFX & SWT 3
X JTextPane automatischer Zeilenumbruch IM Wort AWT, Swing, JavaFX & SWT 2
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
S Swing JtextPane sau langsam AWT, Swing, JavaFX & SWT 15
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
S Swing Style Attribute aus JTextPane kopieren AWT, Swing, JavaFX & SWT 1
E JTextPane Focus AWT, Swing, JavaFX & SWT 1
TheJavaKid JTextPane: komplexe Formatierung (links) AWT, Swing, JavaFX & SWT 2
B Swing JTextPane - Einfärbungen auf "default" AWT, Swing, JavaFX & SWT 2
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
T Hintergrundbild in JTextPane fixieren AWT, Swing, JavaFX & SWT 2
M Swing JTextPane frisst Anführungszeichen AWT, Swing, JavaFX & SWT 2
M Swing JTextPane + Scrollbar = Fragen AWT, Swing, JavaFX & SWT 15
H Swing JTextPane hat unästhetisches Scrollbar AWT, Swing, JavaFX & SWT 3
R Swing Renderproblem bei HTML in einer JTextPane AWT, Swing, JavaFX & SWT 12
N Swing JTextPane zur Anzeige von HTML AWT, Swing, JavaFX & SWT 2
E Swing jTextPane Text datei anzeigen AWT, Swing, JavaFX & SWT 7
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
Tobse Swing [JTextPane] Farbliche Hervorhebung AWT, Swing, JavaFX & SWT 9
X Swing JTextPane bei Größenänderung Formatierung behalten AWT, Swing, JavaFX & SWT 11
0 JTextPane copy/paste trotz editable(false) ? AWT, Swing, JavaFX & SWT 10
T Swing JTextPane Tastatureingabe abfangen AWT, Swing, JavaFX & SWT 4
B Durchsichtiges JScroll und JTextPane AWT, Swing, JavaFX & SWT 4
xehpuk Swing JTextPane in JScrollPane wird nicht ordentlich neugezeichnet AWT, Swing, JavaFX & SWT 3
S Swing JTextPane append formatprobleme AWT, Swing, JavaFX & SWT 5
C JTextPane / JEditorPane ohne Keywords farbig machen AWT, Swing, JavaFX & SWT 4
C Zeilenumbruch von JTextPane wird nicht erkannt AWT, Swing, JavaFX & SWT 2
S JEditorPane oder JTextPane? AWT, Swing, JavaFX & SWT 2
P Aktuelle Zeile in JTextPane farblich hervorheben AWT, Swing, JavaFX & SWT 3
J JTextPane Background setzen AWT, Swing, JavaFX & SWT 6
T Text in JTextPane vertikal (!) zentrieren AWT, Swing, JavaFX & SWT 4
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
M JTextPane - bewegungsloses Hintergrundsbild (Duplikat) AWT, Swing, JavaFX & SWT 2
B JTextPane formatierten Inhalt speichern AWT, Swing, JavaFX & SWT 2
E JTextPane setText ignoriert \n AWT, Swing, JavaFX & SWT 6
P Swing Sichtbaren teil eines JTextPane herausbekommen (mit JScrollPane) AWT, Swing, JavaFX & SWT 2
C Swing JTextPane zeigt HTML-Text aus Variable nicht an :( AWT, Swing, JavaFX & SWT 3
T Zeichen zählen JTextPane AWT, Swing, JavaFX & SWT 4
K Swing JTextPane Formatierungen SyntaxHighlighting AWT, Swing, JavaFX & SWT 11
F Mit TAB JTextPane wechseln AWT, Swing, JavaFX & SWT 5
J JSlider auf JTextPane? AWT, Swing, JavaFX & SWT 2
S Buchstabenpositionen in JTextPane erhalten..? AWT, Swing, JavaFX & SWT 5
I JTextPane und Hyperlink (ohne JEditorPane) AWT, Swing, JavaFX & SWT 5
T Swing JTextArea, JTextPane, JEditorPane...Unterschied?! AWT, Swing, JavaFX & SWT 3
P Drucken von Jtextpane mit Seitenangabe AWT, Swing, JavaFX & SWT 1
M Swing JTextPane mit JScrollPane soll aussehen wie JLabel AWT, Swing, JavaFX & SWT 3
A JTextPane: Text hinzufügen AWT, Swing, JavaFX & SWT 9
E Swing JTextPane Inhalt(Text und Bilder) als HTML text bekommen AWT, Swing, JavaFX & SWT 3
K Swing jTextPane zeilenumbruch AWT, Swing, JavaFX & SWT 2
Stillmatic JTextPane langsam? AWT, Swing, JavaFX & SWT 5
E Swing JTextPane linewrap AWT, Swing, JavaFX & SWT 4
M Swing [JTextPane] Cursor lässt sich nicht mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 3
T Swing xml in JTextPane mit EditorKit, StyledDocument & co. AWT, Swing, JavaFX & SWT 3
M Cursor setzen im JTextPane AWT, Swing, JavaFX & SWT 3
M Formatierungsfehler JTextPane WARUM ?? AWT, Swing, JavaFX & SWT 4
JavaKaffee Array auslesen in jTextPane? AWT, Swing, JavaFX & SWT 9
E JTextPane Bold Italic und Co AWT, Swing, JavaFX & SWT 6
M JTextPane Ende des Feldes AWT, Swing, JavaFX & SWT 4
D JTextPane - Text andersfarbig unterstreichen AWT, Swing, JavaFX & SWT 7
P Probleme mit JTextpane AWT, Swing, JavaFX & SWT 7
M Größe von JTextPane manuell bei Bedarf anpassen AWT, Swing, JavaFX & SWT 6
bugmenot JTextPane String stimmt nicht mit übergebenem String überein AWT, Swing, JavaFX & SWT 9
C JTextPane <br oder <p> statt \n AWT, Swing, JavaFX & SWT 2
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
G JTextPane durchsichtig? AWT, Swing, JavaFX & SWT 6
GilbertGrape Fehler bei HTML in JTextPane AWT, Swing, JavaFX & SWT 2
S JTextPane: Probem mit AlignmentAction AWT, Swing, JavaFX & SWT 3
J Problem mit JTextPane & JScrollPane (horizontal) AWT, Swing, JavaFX & SWT 3
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
J Html in JTextPane anzeigen? AWT, Swing, JavaFX & SWT 2
Steev JTextPane mit Textformatierung funktioniert nicht AWT, Swing, JavaFX & SWT 5
S JTextPane - markierten Text Formatieren AWT, Swing, JavaFX & SWT 11
P HTMLDocument in einem JTextPane. Anhängen von HTML-Code AWT, Swing, JavaFX & SWT 2
M Makierten Text in JTextPane zentrieren AWT, Swing, JavaFX & SWT 2
F JTextPane aktive Zeile AWT, Swing, JavaFX & SWT 2
G insert & JTextPane AWT, Swing, JavaFX & SWT 4
J JTextPane bekommt keinen Focus! AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
R JTextPane scrollen vermeiden AWT, Swing, JavaFX & SWT 2
B Feste Breite einer JTextPane, die HTML anzeigt AWT, Swing, JavaFX & SWT 8
A JScrollPane in JTextPane AWT, Swing, JavaFX & SWT 2
B Swing Logging: Ein/Ausblenden eines scrollenden JTextPane AWT, Swing, JavaFX & SWT 2
F Java JTextPane AWT, Swing, JavaFX & SWT 13
Saxony JTextPane - letzte Zeile löschen AWT, Swing, JavaFX & SWT 4
TheJavaKid LineWrap & WrapStyleWord in JTextPane AWT, Swing, JavaFX & SWT 3
G Zeilenabstand bei HTML-Texten in JLabel/JTextPane AWT, Swing, JavaFX & SWT 7
O Swing Xml highlightning mit JTextPane und Regular expressions AWT, Swing, JavaFX & SWT 5
J JTextPane Alignment AWT, Swing, JavaFX & SWT 6
Y entfernten String einer JTextPane per DocumentListener AWT, Swing, JavaFX & SWT 5
B Ein großes JTextPane komplett drucken AWT, Swing, JavaFX & SWT 2
7 Latex/MathML Code in JTextPane AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben