2017-12-05 1 views
0

Ich bin ein einfacher Textmarker über einen JTextPane implementieren. Ich möchte es spezielle Schlüsselwörter wie if markieren, case, etc, wie ich ihnen geben. Wie IDEs tun.Avoiding mit Swing-Highlighters in neu hinzugefügte Text verschütten

Das Problem, das ich mit Blick auf bin, ist, dass, wenn ich ein spezielles Schlüsselwort erkennen war gerade geschrieben und ich markierte Sie es (das gut funktioniert), dann alles, was ich danach geben wird auch hervorgehoben. Mit Blick auf die API würde ich annehmen, dass dies nicht der Fall sein würde. Wie vermeide ich das?

Hier ist der problematischen Code:

if (word.equals("if")) {       
    textPane.getHighlighter().addHighlight(wordStartIdx, pos+1, highlightPainter); 
    textPane.getHighlighter().addHighlight(pos+2, pos+2, noHightlighter); // tried this to see if it would help, but it doesn't change anything.. anything typed after the word "if" will still be hightlighted! 
} 

Dank

+0

Neue proper [MCVE], der das Problem demonstriert. – camickr

Antwort

2

Statt ein Highlighter verwenden können Sie versuchen, Attribute verwenden:

SimpleAttributeSet green = new SimpleAttributeSet(); 
StyleConstants.setForeground(green, Color.GREEN); 

// Change attributes on some existing text 

StyledDocument doc = textPane.getStyledDocument(); 
int offset = textPane.getCaretPosition(); // should be after the "f" 
doc.setCharacterAttributes(offset-2, 2, green, false); 
+0

Ich las über Attributsätze und fragte sich - was sind die Vor/Nachteile von highlighters vs Attributsätze mit? Sie scheinen ähnlich zu sein in dem, was sie anbieten. –

Verwandte Themen