我正在尝试使用简单的函数在NetBeans中实现文本编辑器,例如:文本样式(粗体,斜体,带下划线的...),打开文件,保存文件和搜索。搜索功能搜索文档中的指定字符串并突出显示结果。当我尝试删除这些突出显示或为不同的搜索添加新的突出显示时,会出现此问题。目前我将StyledDocument对象与jTextPane一起使用。
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()似乎无法正常工作。
答案 0 :(得分:2)
必须承认我不知道样式的工作原理,但是在添加样式时,样式的属性可能会复制到文档中吗?
另一种选择是使用Highlighter类。请参见textPane.getHighlighter()。然后,您可以跟踪在ArrayList中添加的各个高光,然后在需要清除文本平移时使用ArrayList删除高光。
此外,在您的搜索循环中,您有几个问题:
不要使用getText()方法。对于文本窗格中的每行文本,这可能会导致文本偏移关闭一个问题。有关详细信息和解决方案,请参阅Text and New Lines。
您在循环中获取的文本效率不高。您应该只在循环外获取文本。