在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 block
e1.printStackTrace();
}
} else {
JOptionPane.showMessageDialog(null, "搜索完毕。");
}
分享到:
相关推荐
JAVA-----JTextPane实例 代码
JTextPane使用,可以传图片,文字等
NULL 博文链接:https://icarusliu.iteye.com/blog/2098986
演示、说明程序 博文链接:https://bps.iteye.com/blog/136627
SWT JTextPane 可以把控件中需要的字符串的颜色修改成自己想要的颜色
课程设计期间做的Java的桌面端小程序,可以发送Emoji表情的聊天室,另外在文件夹中放置了自己的关键代码部分解析,关于emoji部分可查看笔者博客...
本源码实现了 文本区里加图片和插入艺术字的功能 窗口使用Windows窗体风格
Java制作的网页浏览器和源代码查看器,仿IE的网页浏览功能,不支持HTML5,窗口采用上下分屏显示的方式,上面显示网页浏览器,下面显示该网页的源代码,JTextField jtfAddress; //输入html文件地址或网址 ...
JTextPane jtpShow; //显示文件 JLabel jlInfo; //提示信息 public HTTPBrowserDemo() { super("韩公达制作的html浏览器"); //调用父类构造函数 jtfAddress=new JTextField(20); //实例化地址输入框 jbGo...
NULL 博文链接:https://gh0769.iteye.com/blog/598839
JTextPane jtpShow; //显示文件 JLabel jlInfo; //提示信息 public HTTPBrowserDemo(){ super("html浏览器"); //调用父类构造函数 jtfAddress=new JTextField(20); //实例化地址输入框 jbGo=new...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...