0
我有一個看似很小的問題,但在過去的兩天裏我找不到明確的答案。我創建了一個自動完成的拼寫檢查器,用於檢查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) {}
}
我對任何替代方法都是開放的。我嘗試過使用樣式,但它會引發異常,因爲樣式不能應用於文檔偵聽器中。
我會建議使用現有的組件試圖自己實現語法高亮。你應該嘗試[RSyntaxTextArea](http://fifesoft.com/rsyntaxtextarea/),它是一個內置了這種功能的JTextArea。它是開放源代碼並且非常可擴展。甚至有一個自動完成框架。 – predi 2012-04-26 09:41:12
@predi感謝這篇文章,但我不允許使用任何外部程序或數據結構。這是該項目的目標。我會看看源代碼。 – SuperMario 2012-04-26 10:10:10