2016-06-06 20 views
0

Ich möchte alle Wort Färbung dass mit commment passendJava Regex - Nicht alle passenden Wort in JTextPane Färbung

public WarnaText(JTextPane source) throws BadLocationException 
{ 
    source.setForeground(Color.BLACK); 
    Matcher komen=Pattern.compile("//.+").matcher(source.getText()); 
    while(komen.find()) 
    { 
     String getkomen=komen.group(); 
     StyleContext sc = StyleContext.getDefaultStyleContext(); 
     AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, Color.RED); 
     aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Concolas"); 

     int start = source.getText().indexOf(getkomen); 
     source.select(start,start + getkomen.length()); 

     source.setCharacterAttributes(aset, false); 
    } 
} 

aber, es werden einige Worte nicht JTextPane gefärbt, die viele Kommentare

+0

ändern können Warum Sie 'getkomen = komen.group()' + 'indexOf (getkomen) tun' 'wenn komen.start()' geben Dir direkt? Verwenden Sie einfach 'source.select (komen.start(), komen.end())'. – Andreas

+0

können Sie sich als Antwort bewegen? Ich werde akzeptieren, wenn es funktioniert. – newbie

Antwort

1

Ihr Code enthält abrufen der Kommentartext (getkomen=komen.group()), dann sucht nach der ersten Instanz dieses Textes (...indexOf(getkomen)). Wenn Sie mehrere identische Kommentare haben, wird nur die erste Farbe angezeigt.

Die Matcher gibt Ihnen die Position des gefundenen Textes mit start() und end(). Sie sollten nur diese verwenden.

Matcher komen=Pattern.compile("//.+").matcher(source.getText()); 
while(komen.find()) 
{ 
    StyleContext sc = StyleContext.getDefaultStyleContext(); 
    AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, Color.RED); 
    aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Concolas"); 

    source.select(komen.start(), komen.end()); 

    source.setCharacterAttributes(aset, false); 
} 
-1

Sie sind von source.select(start, start+getkomen.length) zu source.select(komen.start(),komen.end())

public WarnaText(JTextPane source) throws BadLocationException 
{ 
    source.setForeground(Color.BLACK); 
    Matcher komen=Pattern.compile("(/\\*([^\\*]|(\\*(?!/))+)*+\\*+/)|(\\/\\/.+)").matcher(source.getText()); 
    while(komen.find()) 
    { 
     StyleContext sc = StyleContext.getDefaultStyleContext(); 
     AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, Color.RED); 

     aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Concolas"); 

     source.select(komen.start(),komen.end()); 

     source.setCharacterAttributes(aset, false); 
    } 
} 
+0

thx, aber ich möchte kommentieren nur von '//'. – newbie

+0

Schöne Kopie von meinem Kommentar, dann ändern Sie die Regex ohne zu sagen, warum oder wie es besser sein soll. -1 – Andreas