Positionssprung bei setCharachterAttributes

Status
Nicht offen für weitere Antworten.

taouri

Aktives Mitglied
Hallo zusammen,

ich habe folgendes Problem: Ich habe eine JTextPane, die mir Textpassagen highlighten soll. Das funktioniert soweit auch ganz gut, allerdings mit einem Fehler: pro Zeile wird eine Art Versatz erzeugt, den ich mir nicht recht erklären kann.

Hier mal ein Quelltextausschnitt:

Code:
int pos = 0;
    
String text = getText();
    
for(int i = 0 ; i < elementPatterns.size() ; i++)
{
  String pattern = elementPatterns.get(i);
      
  while ((pos = text.indexOf(pattern, pos)) >= 0) 
  {
    doc.setCharacterAttributes(pos,pattern.length(),elementStyle,true);
    pos += pattern.length();
  }
}

Ich vermute der Fehler liegt bei indexOf(), bin mir aber nicht sicher. Vielleicht hatte ja jemand schon einmal dieses Problem...

Vielen Dank im Voraus

taouri
 

André Uhres

Top Contributor
Code:
       Document document = textpane.getDocument();
        Element root = document.getRootElements()[0];
        int cnt = root.getElementCount();
        for (int i = 0; i < cnt; i++) {
            Element line = root.getElement(i);
            int pos = 0;
            String text = "";
            int startLine = line.getStartOffset();
            int endLine = line.getEndOffset();
            try {
                text = document.getText(startLine,  endLine - startLine);
            } catch (BadLocationException ex) {
                ex.printStackTrace();
            }
            for(int j = 0 ; j < elementPatterns.size() ; j++) {
                String pattern = elementPatterns.get(j);
                while ((pos = text.indexOf(pattern, pos)) >= 0) {
                    doc.setCharacterAttributes(pos+startLine,pattern.length(),elementStyle,true);
                    pos += pattern.length();
                }
            }
        }
 

taouri

Aktives Mitglied
thx a lot, läuft bestens. :D
Mit dem Fehler hat ich schon öfters zu tun... Jetzt hat sich das ja zum Glück erledigt, danke. :wink:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben