首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

关于JTextPane中进行搜索结果显示的有关问题及解决

2012-09-02 
关于JTextPane中进行搜索结果显示的问题及解决在JTextPane中进行搜索结果显示时,第一次使用如下方法来进行

关于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, "搜索完毕。");}
?

?

?

热点排行