私が取り組んでいるアプリの一部には、テキスト検索機能を備えたログ ファイル ビューアーが含まれておりJTextField#getText()
、次のようにパターン マッチャーを呼び出します。
Matcher m = somePattern.matcher(textField.getText());
m.find(startPosn);
System.out.println("startPosn: " + m.start());
System.out.println("endPosn: " + m.end());
ここで、textField は JTextField であり、
startPosn はテキスト フィールドの現在のキャレット位置に設定されます
ただし、これによって返される開始位置と終了位置は、 Windows でのみ誤った開始位置と終了位置を返します。
開始位置と終了位置の両方が本来あるべき位置よりも X だけ多くなっています。ここで、X は、textField で startPosn までに改行が検出された回数です。
\r\n
これは Linux では発生しないので、改行 (と\n
)の処理方法の違いによるものではないかと思います。
私は何か間違ったことをしていますか?どうすればこれを回避できますか?
実装 解決:
camickr によってリンクされた TFA の例を使用して変更されました。
Matcher m = somePattern.matcher(textField.getDocument().getText(0, textField.getDocument().getLength()));
m.find(startPosn);
System.out.println("startPosn: " + m.start());
System.out.println("endPosn: " + m.end());
注: 最初の行のみが変更されました。
これにより、Linux と Windows の両方で正しい出力が得られました。