2017-01-29 3 views
0

私はトレーニング目的でJavaでテキストエディタを作成しています。だから、私はJTextPaneを使ってテキストを編集し、setCharacterAttributesを使ってテキスト中のいくつかの単語を強調表示しています。コードは部分的に機能し、最初の行はすべて動作しますが、2行目と4行目ではコードが機能しなくなります。コード怒鳴るは、このバグを修正する私の試みを示していますJTextPaneは最初の行で文字属性を正しく設定します

 
     private void changeColor(StyledDocument styledDocument) 
     { 
      String keywords[] = {"html", "body", "div", "teste"}; 
      String texto  = edtEditing.getText(); 

      int startIndex; 
      int start; 

      StyleContext context = StyleContext.getDefaultStyleContext(); 

      Style styleDefault = context.getStyle(StyleContext.DEFAULT_STYLE); // default 
      styledDocument.setCharacterAttributes(0, texto.length(), styleDefault, true); 

      AttributeSet attr = context.addAttribute(context.getEmptySet(), StyleConstants.Foreground, Color.red); 

      for (String word:keywords) 
      { 
       startIndex = 0; 
       start  = texto.indexOf(word, startIndex); 
       while (start >= 0) 
       { 
        styledDocument.setCharacterAttributes(start, word.length(), attr, true); 
        startIndex += word.length(); 
        start = texto.indexOf(word, startIndex); 
       } 
      } 
     } 

は怒鳴る画像上のエラーを参照してください: Click to see the error

をerrosが原因CRLFのために発生しますが、私は、なぜ...

を把握することはできませんように見えます

ここにはexecutable jar fileがあります。 「ファイル」 - >「新規」を選択し、「teste」と入力してください 事前に感謝します!

+0

エラーは何ですか? –

+0

最初の行に "teste"と入力してOKを入力し、もう一度 "teste"と入力するとエラーが表示されます。 "este"だけが強調表示され、再度Enterキーを押すと "ste"だけがハイライト表示されます...唯一の違いは、改行がコンポーネントによって正しく処理されていないことです。 – ViniciusC

+0

'jar'ファイルを使ってコードの問題を見つけることができません。何が起こったのか再度' teste'を打つと教えてください。 –

答えて

0

この副作用は、この行によって引き起こされる:

String texto  = edtEditing.getText(); 

あなたはJTextPaneから直接テキストを取得しているが、あなたはStyledDocumentオブジェクト上の属性を設定しています。この行を次のように変更してください。

StyledDocument document = edtEditing.getStyledDocument(); 
String texto = document.getText(0, document.getLength()); 

考えられる例外を処理してください。

以下のコードを実行すると、この動作が一貫していることがわかります。反対に、「偽」が表示されることがあります。

JTextPane pane = new JTextPane(); 
pane.setText("Something html\r\nSomething html"); 
StyledDocument document = pane.getStyledDocument(); 
String text2 = pane.getText(); 
String text1 = document.getText(0, document.getLength()); 
System.out.println(text1.equals(text2)); 
+0

完璧、ありがとう! – ViniciusC

+0

喜んでください:)他のユーザーがあなたの質問が入力される前に解決されたことを確認できるように、回答を受け入れたものとしてマークすることができます。 – Dth

関連する問題