0
私は一見小さな問題を抱えていますが、過去2日間で明確な答えが見つかりませんでした。私はJTextPane(mainTxtTypeArea
と呼ばれる)をチェックする自動補完スペルチェッカーを作成しています。ユーザーが現在作業している現在の単語を取得することができますが、開始および終了のインデックスが付いていますが、特定の単語をハイライトしたいときは、入力した単語を超えてハイライトが続きます。これは、ドキュメントイベントが発生したときに呼び出されるコードです。ハイライトを開始および停止する方法は?
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) {}
}
私は他の選択肢もあります。私はスタイルを使用しようとしましたが、スタイルはドキュメントのリスナーに適用できないため、例外がスローされます。
独自の構文強調を実装しようとするよりも、既存のコンポーネントを使用することをお勧めします。このような機能を組み込んだJTextAreaである[RSyntaxTextArea](http://fifesoft.com/rsyntaxtextarea/)を試してみてください。オープンソースで非常に拡張性があります。オートコンプリートのフレームワークもあります。 – predi
@predi投稿に感謝しますが、私は外部プログラムやデータ構造を使用することはできません。それがプロジェクトの目的です。私はソースコードを見てみましょう。 – SuperMario