2016-06-04 15 views
-1

Ich habe eine ArrayList von Strings, die in einem Textbereich angezeigt wird, und ich versuche, den Textmarker bei jedem Aufruf dieser Methode um ein Wort zu verschieben, aber es hebt das vorherige Wort hervor, weil es stattdessen ein Duplikat ist von der nächsten. Hier ist mein Code:Wie ein doppeltes Wort hervorheben?

ArrayList<String> words = new ArrayList<String>(); 
       words.add("Word1"); //Keeps highlighting this one twice 
       words.add("Word2"); 
       words.add("Word1"); //Instead of highlighting this one 
       words.add("Word3"); 

       for(String other : words) 
       { 
        textArea.setText(textArea.getText() + "\n" + other); 
       } 

       int wordNum = 0; 

       String word = words.get(wordNum++); 

       Highlighter highlighter = textArea.getHighlighter(); 
       HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.blue); 
       int p0 = textArea.getText().indexOf(word); 
       int p1 = p0 + word.length(); 

       try 
       { 
        highlighter.removeAllHighlights(); 
        highlighter.addHighlight(p0, p1, painter); 
       } catch (BadLocationException ex) 
       { 
        ex.printStackTrace(); 
        return; 
       } 

Antwort

0

Wenn Sie jedes einzelne Wort von JTextArea hervorheben möchten, versuchen Sie diese Methode,

Highlighter highlighter = jtextArea.getHighlighter(); 
    DefaultHighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.blue); 
int front=0; 

public void highligtNextWord(JTextArea ta)throws Exception{ 
    String str=ta.getText().trim()+" "; 
    int end=str.indexOf(" ",front); 
    highlighter.removeAllHighlights(); 
    highlighter.addHighlight(front, end, painter); 
    if(end>=str.length()-1) 
     front=0; 
    else 
     front=end+1; 
} 
0

Da Sie Hervorhebung von p0 zu p1 was bedeutet, aus dem ersten Index des ersten Auftretens von Wort, Sie markieren das erste Wort, nicht die zweite. Um dies zu vermeiden, verwenden Sie stattdessen lastIndexOf() indexOf().

int p0 = textArea.getText().lastIndexOf(word); 
int p1 = p0 + word.length(); 

Jetzt erhalten Sie das letzte Vorkommen des doppelten Wortes statt des ersten.

Verwandte Themen