随机错误突出显示导致JTextPane(阿拉伯语)

时间:2013-03-27 00:40:48

标签: java swing arabic jtextpane swing-highlighter

我正在尝试搜索并突出显示我的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 红圈=错误的结果,绿圈=正确的结果。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我不知道是否支持使用荧光笔。据我所知,Highlighter仅供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();
}