关于JTextPane中进行搜索结果显示的问题及解决
在JTextPane中进行搜索结果显示时,第一次使用如下方法来进行显示:
?
int start = textPane.getText().indexOf(str, position);if (-1 != start){ position = start + str.length();textPane.setSelectionStart(start);textPane.setSelectionEnd(start + str.length()); }
?
?结果发现除第一行的搜索结果位置正确外,其它行的位置均不正确。
?原因貌似是indexOf将换行符计算进去了,但setSelectionStart没有计算换行符,这样导致其结果比实际的结果位置靠后。
?
?只能换一种方式:对JTextPane中显示的文本的每一段进行搜索,再将命中的文本设置成选中模式:
?
Document doc = textPane.getDocument();Element root = doc.getDefaultRootElement();//对每一个段落进行搜索 if (nowSeg < root.getElementCount()){Element seg = root.getElement(nowSeg);try {String line = doc.getText(seg.getStartOffset(), seg.getEndOffset() - seg.getStartOffset());int start = line.indexOf(str);while (-1 == start){nowSeg++;if (nowSeg >= root.getElementCount()){//搜索完毕JOptionPane.showMessageDialog(null, "搜索完毕。");return;}seg = root.getElement(nowSeg);line = doc.getText(seg.getStartOffset(), seg.getEndOffset() - seg.getStartOffset());start = line.indexOf(str);}textPane.setSelectionStart(seg.getStartOffset() + start);textPane.setSelectionEnd(seg.getStartOffset() + start + str.length());nowSeg++;} catch (BadLocationException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}} else {JOptionPane.showMessageDialog(null, "搜索完毕。");}?
?
?