Swing HTML-Text in JEditorPane einfärben

Hallo,

ich habe eine JEditorPane und eine Liste mit Regex-Begriffen und zugehörigen Farben. Ich durchsuche den Text aus der JEditorPane per Schleife nach jeder einzelnen regex und färbe die jeweiligen Textstellen mit der zugehörigen Farbe ein.

Das Problem dabei: Manchmal funktioniert das ohne Probleme, und manchmal funktioniert es gar nicht. Die Schleife wird scheinbar vollständig durchlaufen. Ich kann mir nicht erklären, warum es manchmal geht und manchmal nicht. Ich kann nicht erkennen, dass ich etwas anders mache. Muss ich abschließend der JRE irgendwie mitteilen, dass sie das Textfenster noch mal neu zeichnen soll? JEditorPane.repaint() bringt jedenfalls nichts.

Hier ein Schnipsel aus meinem Code:

Java:
for (int i = 0; i < regexTerms.size(); i++) {
	String pattern = regexTerms.get(i).getPattern();
	Color color = regexTerms.get(i).getColor();
	Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
	Matcher m = p.matcher(text);
	while(m.find()) {
		int start = m.start() + 1;
		int end = m.end() + 1;
		MutableAttributeSet style = new SimpleAttributeSet();
		StyleConstants.setForeground(style, color);
		doc.setCharacterAttributes(start, end-start, style, false);
	}
}
 

diggaa1984

Top Contributor
wann machst du das denn?

ich habe etwas ähnliches programmiert und dabei die Färbung im DocumentModel untergebracht. Jedesmal wenn ich ein Zeichen eingebe oder lösche oder copy-paste nutze dann werf ich n Scanner an, der mir den Text sozusagen klassifiziert, und den jeweiligen Teilen weise ich feste Styles zu. Was anderes machst du eigentlich auch nicht?!
 

diggaa1984

Top Contributor
also gaaaaanz grob sieht das bei mir so aus:

Java:
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
    int[] offsets = getScanOffset(offs,str.length()); //nur noetiges highlighten
    invokeHighlight(offsets[0],offsets[1]);
}//insertString


protected void postRemoveUpdate(DefaultDocumentEvent chng) {
    int[] offsets = getScanOffset(offs,str.length()); //nur noetiges highlighten
    invokeHighlight(offsets[0],offsets[1]);
}//postRemoveUpdate


private void invokeHighlight(final int startOffset, final int endOffset) {
    SwingUtilities.invokeLater(new Thread() {
			
        @Override
        public void run() {
            try {
                highlightString(startOffset, endOffset);
            } catch (BadLocationException e) {
                SimpleLog.print("INTERNAL ERROR - while highlighting string (SyntaxHighlightStyledDocument\n"
    						+ e.getMessage());
            }//try
        }//run
    });
}//invokeHighlighting


private void highlightString(int startOffset, int endOffset) throws BadLocationException {
    //Text klassifizieren und ne Liste erhalten ...

    for(Token t: tokenList) {
        // bissel unwichtige Sachen ...
        switch (t.getType()) {
            case BLA: super.setCharacterAttributes(begin+startOffset, t.getData().length(), getSpecificStyleset(t.getType()).copyAttributes(), true);
                break;
            default: super.setCharacterAttributes(begin+startOffset, t.getData().length(), defaultAttributeSet.copyAttributes(), true);

        // bissel unwichtige Sachen ...
    }//for
}//highlightString
 
Wenn ich das richtig sehe, machst Du bis auf zwei Dinge das gleiche wie ich:

1) Du bringst den Highlighter im DocumentModel unter, während ich ein vorgefertigtes DocumentModel nehme und dann von außen eingreife, sobald sich die Array-Liste der regulären Ausdrücke geändert hat. Das mache ich deshalb so, weil sich der Text selbst nicht ändern kann, sondern nur die Suchwörter. Ich schätze, es würde keinen Sinn machen, das in meinem Fall im DocumentModel unterzubringen, oder?

2) Du bringst das ganze in einem neuen Thread unter, während ich das einfach so als Methode abarbeite. Geschwindigkeitstechnisch ist das kein Problem bei mir, aber ich werde auch mal versuchen, das in einen anderen Thread auszulagern; vielleicht geht dieser komische Fehler dann ja weg.

Falls Du weitere Ideen hast, bitte melden! Danke!

Edit: In einem neuen Thread läuft es jetzt, aber das Problem ist nach wie vor da. Abgesehen davon laufe ich eher Gefahr, dass sich während der Thread-Ausführung irgendwas ändert und es dadurch zu Problemen kommt. Ich mache es also wieder rückgängig.
 
Zuletzt bearbeitet:

diggaa1984

Top Contributor
ich hatte auch arg kuriose effekte bei mir, wobei ich nicht mehr sagen kann ob diese durch den neuen thread verschwunden sind oder nicht. Teilweise wurde trotz korrekter Klassifizierung der falsche Style drüber gelegt, aber ist zu lange her um zu sagen, wie ich das behoben habe. Kannst eventuell n KSKB erstellen, wo man die Fehler nachvollziehen kann?
 
Ich habe einen neuen Hinweis: Das ganze geht nur unter Linux schief. Ich habe hier Ubuntu 10.4 mit der JRE von OpenJDK (Version 6b18-1.8-0) und wahlweise mit der JRE von Sun (Version 1.6-34) ausprobiert, und bei beiden tritt das Problem auf. Unter Windows XP habe ich es jetzt mal mit der Sun JRE (Version 6.0.180.7) ausprobiert, da gibt es keine Probleme.

Wäre es trotzdem noch hilfreich, ein Minimalbeispiel einzusehen? Falls es erfolgversprechend ist, mache ich mir gern die Mühe.

Wo kann man in Erfahrung bringen, welche Methoden unter welchem Betriebssystem funktionieren? Andererseits: Es wird ja auch keine Warnung oder Exception unter Linux ausgegeben...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JEditorPane - Text und Graphik in HTML speichern AWT, Swing, JavaFX & SWT 4
S JEditorPane soll HTML und dann Text anzeigen..? AWT, Swing, JavaFX & SWT 5
W HTML-Text mit relativer URL in JEditorPane einlesen AWT, Swing, JavaFX & SWT 10
T DataFlavor für HTML-formatierten Text im JEditorPane AWT, Swing, JavaFX & SWT 8
S JEditorPane HTML-Text auslesen AWT, Swing, JavaFX & SWT 2
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
G Swing JCheckBox, setEnabled(false) und HTML Text Problem AWT, Swing, JavaFX & SWT 5
C Swing JTextPane zeigt HTML-Text aus Variable nicht an :( AWT, Swing, JavaFX & SWT 3
H Mit JLabel HTML - formatierten Text anzeigen AWT, Swing, JavaFX & SWT 14
E Swing JTextPane Inhalt(Text und Bilder) als HTML text bekommen AWT, Swing, JavaFX & SWT 3
S Swing Text -> HTML: Caret-Koordinaten verschoben AWT, Swing, JavaFX & SWT 6
S drawString für HTML-Text? AWT, Swing, JavaFX & SWT 7
F HTML Text irgendwie auf BufferedImage bringen AWT, Swing, JavaFX & SWT 3
Noar Infofenster zentrieren und HTML-formatierten Text readonly a AWT, Swing, JavaFX & SWT 7
MasterEvil HTML formatierten Text mit drawString ? AWT, Swing, JavaFX & SWT 3
K HTML-Text in einem Label anzeigen AWT, Swing, JavaFX & SWT 8
Z JTextPane (text/html): Schrift festlegen AWT, Swing, JavaFX & SWT 5
izoards HTML Editor AWT, Swing, JavaFX & SWT 3
H setToolTipText ignoriert HTML-Formatierung des anzuzeigenden Strings AWT, Swing, JavaFX & SWT 4
Yonnig Lokale HTML-Datei in Java GUI rendern AWT, Swing, JavaFX & SWT 4
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
C HTML Editor Eingabemaske kafenio Ersatz AWT, Swing, JavaFX & SWT 7
A JavaFX Daten in eine HTML-Table mit JS schreiben AWT, Swing, JavaFX & SWT 3
T JTextPane ignoriert HTML Zeilenumbruch <br> tag wegen eigenem HTMLEditorKit AWT, Swing, JavaFX & SWT 5
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
K Html Editor AWT, Swing, JavaFX & SWT 3
B Swing HTML in JLabels AWT, Swing, JavaFX & SWT 6
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
B JavaFX Java FX Html Template AWT, Swing, JavaFX & SWT 0
F JavaFX JavaFX HTMLEditor-Eingabe in Textarea als HTML anzeigen AWT, Swing, JavaFX & SWT 2
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
R Swing JTable : Header der Spalten ergänzen mit caption (wie bei html-table) AWT, Swing, JavaFX & SWT 2
I LookAndFeel HTML Auflösung - Online Editor programmieren AWT, Swing, JavaFX & SWT 2
T HTML mit Java AWT, Swing, JavaFX & SWT 1
U Label zeigt nicht überall HTML Zeichen AWT, Swing, JavaFX & SWT 3
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
H RCP(SWT) Browser-Widget zeigt keine locale HTML-Dateien an AWT, Swing, JavaFX & SWT 1
F Submit eines HTML-Formulars in Vaadin AWT, Swing, JavaFX & SWT 3
J JApplet, HTML und access denied exitVM.0 AWT, Swing, JavaFX & SWT 3
L Swing JToogleButton Vordergrundfarbe bei HTML String AWT, Swing, JavaFX & SWT 4
H Swing JApplet - HTML - ClassNotFoundException AWT, Swing, JavaFX & SWT 7
G Swing HTML Version AWT, Swing, JavaFX & SWT 11
S HTML in Java einbinden AWT, Swing, JavaFX & SWT 4
B JEditorPane lädt keine Schriftfarbe in HTML AWT, Swing, JavaFX & SWT 2
J JEditorPane mit HTML füllen AWT, Swing, JavaFX & SWT 2
N Swing JTree TreeCellRenderer mit html und automatischen Zeilenumbruch AWT, Swing, JavaFX & SWT 8
N Swing KomponentenHöhe an html-Inhalt anpassen AWT, Swing, JavaFX & SWT 4
F Applet JApplet per html einbinden - Main class kann nicht gefunden werden AWT, Swing, JavaFX & SWT 15
C html browser in Application nutzen AWT, Swing, JavaFX & SWT 10
S SWT Anzeigen einer lokalen HTML-Seite im Browser Widget über RAP nicht möglich AWT, Swing, JavaFX & SWT 3
S HTML Syntaxhighlighting AWT, Swing, JavaFX & SWT 7
S SWT HTML-WYSIWUG-Editor 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
N Applet JButton soll html Datei aus einem Ordner öffnen AWT, Swing, JavaFX & SWT 2
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
H Swing JEditorPane und HTML AWT, Swing, JavaFX & SWT 3
D System.out.println() gibt html-Tags mit aus AWT, Swing, JavaFX & SWT 2
P Swing HTML-Renderer AWT, Swing, JavaFX & SWT 15
J 2D-Grafik Html in drawString() AWT, Swing, JavaFX & SWT 2
L Applet In HTML einbinden klappt einfach nicht AWT, Swing, JavaFX & SWT 5
X Frei nutzbarer HTML Editor AWT, Swing, JavaFX & SWT 13
B WYSIWYG-HTML-Editor / Validator für JAVA AWT, Swing, JavaFX & SWT 2
N JCombobox wie in HTML AWT, Swing, JavaFX & SWT 6
H Swing HTML in einem JEditorPane zeilenweise hinzufügen ohne Inhalt jedes Mal neu zu laden AWT, Swing, JavaFX & SWT 4
G Swing JEdtitorPane und HTML Image Seite AWT, Swing, JavaFX & SWT 2
P Swing html mit bilder drin AWT, Swing, JavaFX & SWT 12
destroflyer Wort im JLabel verlinken (per HTML) AWT, Swing, JavaFX & SWT 3
R Swing JTextComponent und HTML AWT, Swing, JavaFX & SWT 7
D Nodes eines statischen JTrees sollen auf Anker (Textmarken) in einer HTML-Datei zeigen AWT, Swing, JavaFX & SWT 8
D Darstellung in Swing wie HTML? AWT, Swing, JavaFX & SWT 2
M Swing Kein update bei simulierten HTML-Link AWT, Swing, JavaFX & SWT 4
B Grafiken in JLabel mittels html AWT, Swing, JavaFX & SWT 5
K Alternative zu Applet mit HTML-Einbindung AWT, Swing, JavaFX & SWT 11
D Swing JEditorPane mit HTML aber ohne Bilder AWT, Swing, JavaFX & SWT 3
T HTML und JEditorPane AWT, Swing, JavaFX & SWT 6
J JList & HTML AWT, Swing, JavaFX & SWT 2
T HTML Seite neu laden mittels Applet AWT, Swing, JavaFX & SWT 2
N Performanceprobleme mit JLabel und HTML content AWT, Swing, JavaFX & SWT 5
A Oberfläche wir mit html-Frames aufbauen AWT, Swing, JavaFX & SWT 11
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
C Suche fertigen HTML editor AWT, Swing, JavaFX & SWT 2
B HTML in Swing Components (JLabel) AWT, Swing, JavaFX & SWT 7
M JEditorPane lädt HTML ohne Bilder AWT, Swing, JavaFX & SWT 2
M JEditorPane lädt HTML ohne Bilder AWT, Swing, JavaFX & SWT 2
G Hilfe beim Erstellen eines eigenen Html-Editors! AWT, Swing, JavaFX & SWT 4
G Frage zu Labels mit html AWT, Swing, JavaFX & SWT 3
P HTML darstellen mit Java AWT, Swing, JavaFX & SWT 4
GilbertGrape Fehler bei HTML in JTextPane AWT, Swing, JavaFX & SWT 2
ARadauer swing html wysiwyg componente AWT, Swing, JavaFX & SWT 6
V "Anker" wie in HTML für JScrollPane? AWT, Swing, JavaFX & SWT 2
M html im Titel von JFrame AWT, Swing, JavaFX & SWT 9
M html aus einem Stream Laden und Anzeigen AWT, Swing, JavaFX & SWT 4
T Öffnen von SWT-Dialogboxen durch HTML-Link in HTML-Code AWT, Swing, JavaFX & SWT 4
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
J Html in JTextPane anzeigen? AWT, Swing, JavaFX & SWT 2
V Swing to HTML? AWT, Swing, JavaFX & SWT 4
A HTML-Datei öffnen AWT, Swing, JavaFX & SWT 3
A Noch mal Zusammenarbeit Java und HTML AWT, Swing, JavaFX & SWT 4
A Java und HTML AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben