2

テキストエリア内の単語のすべての出現を強調表示する方法があります。開始オフセットと終了オフセットを使用して、その行の単語のみを強調表示する方法はありますか?

私の現在のコード。

public static 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());
        int pos = 0;

        // Search for pattern
        while ((pos = text.indexOf(pattern, pos)) >= 0) {
            // Create highlighter using private painter and apply around pattern
            hilite.addHighlight(pos, pos + pattern.length(), painter2);
            pos += pattern.length();
        }
    } catch (BadLocationException e) {
    }
}

これは、実行された JButton アクションで呼び出されます。

highlight(textArea_1, "in");

結果: ここに画像の説明を入力

Start and End Offset Method を使用してみましたが、うまくいきませんでした。6 行目のみで「in」を強調表示しようとしました。

static int iline =6;

    public static void highlight(JTextComponent textComp, String pattern) {

    try {
        Highlighter hilite = textComp.getHighlighter();
        javax.swing.text.Document doc = textComp.getDocument();
        int start =((JTextArea) textComp).getLineStartOffset(iline);
        int end = ((JTextArea) textComp).getLineEndOffset(iline);
        String text = doc.getText(start,end);
        int pos = start;

        // Search for pattern
        while ((pos = text.indexOf(pattern, pos)) >= start) {
            // Create highlighter using private painter and apply around pattern
            hilite.addHighlight(pos, pos + pattern.length(), painter2);
            pos += pattern.length();
        }
    } catch (BadLocationException e) {
    }
}
4

2 に答える 2

3
int start =((JTextArea) textComp).getLineStartOffset(iline);
int end = ((JTextArea) textComp).getLineEndOffset(iline);
String text = doc.getText(start,end);
int pos = start;

各行に 10 文字あるとします。したがって、6 行目のテキストが必要な場合、開始変数は 51 に等しくなり、終了変数は 60 になります。

6行目のテキストを取得すると、10文字しか含まれません。

したがって、51 から検索を開始すると、すでに検索文字列の末尾にいるため、一致するものは何も得られません。

オフセット 0 で検索を開始するだけでよく、ハイライトを追加するときに、開始の値をハイライト オフセットに追加する必要があります。

于 2013-03-17T06:14:30.007 に答える