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