3

JTextPaneで単語を検索して強調表示しようとしています。これまでのところ結果が少ない単語でうまく機能しますが、インスタンスが多い単語を検索しようとすると、蛍光ペンが結果をハイライト表示して、文字数が多くないようにすることがあります。 。とにかく、これが私がこの目的のために使用したコードです。

    int index = 0;
    String text = null;
    try {
    int length=textPane.getDocument().getLength();
    text = textPane.getDocument().getText(0,length);
    } catch (BadLocationException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }  
    try {
     while ((index = text.indexOf(myWord, index)) >= 0) {
    DefaultHighlighter.DefaultHighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
    textPane.getHighlighter().addHighlight(index, index+myWord.length(), highlightPainter);
    index += myWord.length();

    }

    } catch (BadLocationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

これが問題を説明するスクリーンショットです http://i.imgur.com/po6U0rh.png 赤い円=間違った結果、緑の円=正しい結果。

よろしくお願いします。

4

1 に答える 1

2

ハイライターの使用がサポートされているかどうかはわかりません。私の知る限り、蛍光ペンはjavax.swing.text.Viewとその関連クラスでのみ使用されることを意味します。

私はそれをこのようにします:

StyledDocument document = textPane.getStyledDocument();
Style highlight = document.addStyle("highlight", null);
StyleConstants.setBackground(highlight, Color.YELLOW);

String text = document.getText(0, document.getLength());
while ((index = text.indexOf(myWord, index)) >= 0) {
    document.setCharacterAttributes(index, myWord.length(), highlight, false);
    index += myWord.length();
}
于 2013-03-27T02:08:18.383 に答える