一見小さな問題があるように見えますが、過去 2 日間で明確な答えを見つけることができませんでした。JTextPane (と呼ばれる) をチェックするオートコンプリート スペル チェッカーを作成していますmainTxtTypeArea
。ユーザーが作業している現在の単語を開始インデックスと終了インデックスで取得できますが、特定の 1 つの単語のみを強調表示したい場合、ハイライターは入力された単語を超えて続行します。これは、ドキュメント イベントが発生したときに呼び出されるコードです。
public void checkWord(DocumentEvent e) {
try {
Highlighter redZigZag = mainTxtTypeArea.getHighlighter();
int start = Utilities.getWordStart(mainTxtTypeArea, e.getOffset());
int end = Utilities.getWordEnd(mainTxtTypeArea, e.getOffset());
int length = end - start;
String word = mainTxtTypeArea.getDocument().getText(start, length);
if(dictionary.find(word) == false && Character.isWhitespace(word.charAt(0)) == false){
System.out.println("Incorrect: "+word);
//I found a zigzag highlighter online, but the default yields the same result
redZigZag.addHighlight(start, end, painter);
} else {
System.out.println("Correct: "+word);
}
} catch (BadLocationException ex) {}
}
私はあらゆる代替案にもオープンです。スタイルを使用しようとしましたが、スタイルをドキュメント リスナーに適用できないため、例外がスローされます。