2014-03-29 45 views
0

我試圖在NetBeans中實現一個文本編輯器,它具有簡單的功能:文本樣式(粗體,斜體,帶下劃線的),打開文件,保存文件和搜索。搜索功能在文檔中搜索指定的字符串並突出顯示結果。當我試圖刪除這些高亮或爲不同的搜索添加新的亮點時會出現問題。目前我使用StyledDocument對象和jTextPane。NetBeans中的文本編輯器

private void textHighlight(int startAt, int endAt, Color c) { 
    Style sCh; 
    sCh = textEditor.addStyle("TextBackground", null); 
    StyleConstants.setBackground(sCh, c);     
    StyledDocument sDoc = textEditor.getStyledDocument(); 
    sDoc.setCharacterAttributes(startAt, endAt - startAt, sCh, false); 
} 

private void textFind(java.awt.event.ActionEvent evt) { 
    int searchIndex = 0;       
    String searchValue = searchField.getText(); 
     if(lastIndex != -1) { 
      while(searchIndex < lastIndex) { 
       countOccurencies++; 
       int i = textEditor.getText().indexOf(searchValue, searchIndex);     
       textHighlight(i, i+searchValue.length(), Color.MAGENTA); 
       searchIndex = i+searchValue.length(); 
      } 
      statusLabel.setText(countOccurencies + " rezultatov."); 
     } else { 
      statusLabel.setText("Ni rezultatov!"); 
     } 
    } 
} 

private void searchEnd(java.awt.event.ActionEvent evt) { 
    textEditor.removeStyle("TextBackground"); 
} 

removeStyle()似乎沒有工作。

回答

2

必須承認我不知道樣式是如何工作的,但是在添加樣式時樣式的屬性可能會複製到文檔中?

另一種選擇是使用Highlighter類。請參閱textPane.getHighlighter()。然後,您可以跟蹤您添加到ArrayList中的各個高光,然後使用ArrayList刪除亮點,以便清除文本平移。

而且,你的搜索循環中,你有幾個問題:

  1. 不要使用的getText()方法。這可能會導致文本偏移在文本窗格中的每行文本中都會被忽略。有關更多信息和解決方案,請參閱Text and New Lines

  2. 您正在獲取循環內的文本,效率不高。你只能在循環之外獲得文本。

+0

我試圖在替換函數中使用getDocument()。getText()方法,但是當替換長度與原始文本長度不同時,它給了我一個偏移量。 – user3476140

+0

@ user3476140,不確定你在說什麼。這個問題是關於突出顯示文字,而不是取代文字。我給了你一個鏈接閱讀,我不能更好地解釋這個概念。 – camickr