1

私の質問は非常に簡単です。

JtextAreaがあります。私の目的は、その行の最初の文字の先頭からそのテキストエリアの行を強調表示することです。Java行の開始と終了のオフセットを使用すると、行全体を強調表示できますが、見栄えが悪くなります。

その行からすべてのテキストを取得しようとしています。通常、スペースが含まれます。私が試したこと:

String text = textArea_1.getText(); //My TextArea
int startIndex = textArea_1.getLineStartOffset(i11); //i11 is the Line Number
int endIndex = textArea_1.getLineEndOffset(i11);
String myString = text.substring(startIndex, endIndex);
//I get all text from that line

for(int i1 = 0; i1 < myString.length(); i1++){ 
//This is trying to increment startindex until it gets a non empty space, 
//the counter should stop.
       while(Character.isWhitespace(myString.charAt(i1))){
              startIndex++;
              break;
       }
}

String myString2 = text.substring(startIndex, endIndex);
//I now pass the new startIndex
String [] javaWords = {myString2};//Function highlight takes an array.
System.out.println("String to Highlight: " + myString2);
highLight(textArea_1, javaWords);//Function to Highlight  

蛍光ペンの方法:

public void highLight(JTextComponent textComp, String[] pattern) {

  try {
     Highlighter hilite = textComp.getHighlighter();
     javax.swing.text.Document doc = textComp.getDocument(); 
     String text = doc.getText(0, doc.getLength());
     for (int i = 0; i < pattern.length; i++) {
        int pos = 0;
         // Search for pattern
         while ((pos = text.indexOf(pattern[i], pos)) >= 0) {
            hilite.addHighlight(pos, pos + pattern[i].length(),painter);
            pos += pattern[i].length();
         }
     }
     } catch (BadLocationException e) {}
}

上記のコードの結果: ここに画像の説明を入力してください

in x;
string y;
chr z; 

上記を強調する必要があります。私は何かが足りないのですか?

4

1 に答える 1

0

問題はループにありました..修正しました:

String text = textArea_1.getText();
                        int startIndex = textArea_1.getLineStartOffset(i11);
                        int endIndex = textArea_1.getLineEndOffset(i11);
                        String myString = text.substring(startIndex, endIndex);
                        for(int i1 = 0; i1 < myString.length(); i1++){
                            if(Character.isWhitespace(myString.charAt(i1))){
                                startIndex++;

                            }
                         if(!Character.isWhitespace(myString.charAt(i1))){
                                startIndex = startIndex+0;;
                                break;
                            }


                        }

                        String myString2 = text.substring(startIndex, endIndex);
                        String [] javaWords = {myString2};
                        System.out.println("String to Highlight: " + myString2);
                        highLight(textArea_1, javaWords);    

結果:

ここに画像の説明を入力

于 2013-03-23T18:47:44.820 に答える