`

关于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 block
					e1.printStackTrace();
				}
			} else {
				JOptionPane.showMessageDialog(null, "搜索完毕。");
			}
 

 

 

  • src.rar (19.1 KB)
  • 下载次数: 7
分享到:
评论
2 楼 icarusliu 2012-08-19  
java1997 写道
博主,你好,正好用到这个,能不能贴个完整的使用代码啊,谢谢

完整的程序已经在附件中上传了。搜索的代码在ContentTextPane这个类的nextSearchPos这个函数里面。代码里面在每个段落中只命中一个结果,还需要修改一下。
1 楼 java1997 2012-08-19  
博主,你好,正好用到这个,能不能贴个完整的使用代码啊,谢谢

相关推荐

    JAVA-----JTextPane实例

    在Java Swing库中,`JTextPane`是一个功能强大的文本组件,它允许显示和编辑富文本格式,包括字体、颜色和排版等特性。本文将深入探讨`JTextPane`的基本概念、功能以及如何在Java应用程序中使用它。 #### 一、`...

    控制jEditorPane和jTextPane换行的演示程序

    在Java Swing库中,`JEditorPane`和`JTextPane`是两个常用的文本组件,它们主要用于显示和编辑富文本内容。在这个特定的程序中,我们看到的是一个演示如何控制这两类组件换行特性的应用。`JEditorPane`通常用于显示...

    JTextPane 关键字变色

    在给定的标题“JTextPane 关键字变色”和描述“SWT JTextPane 可以把控件中需要的字符串的颜色修改成自己想要的颜色”中,我们关注的主要知识点是`JTextPane`如何实现特定关键字的高亮显示,也就是改变颜色。...

    JTextPane使用

    JTextPane使用,可以传图片,文字等

    JTextPane--insert-Image.zip_JTextPane

    1. **创建`JTextPane`实例**:首先,你需要创建一个`JTextPane`对象,将其添加到容器(如`JFrame`)中,以便在窗口中显示。 ```java JTextPane textPane = new JTextPane(); JFrame frame = new JFrame("JTextPane...

    JTable编辑器、渲染器及JTextPane着色、搜索实例——待办事项、日历及JSON格式化工具

    NULL 博文链接:https://icarusliu.iteye.com/blog/2098986

    ChatApp_Java.zip

    课程设计期间做的Java的桌面端小程序,可以发送Emoji表情的聊天室,另外在文件夹中放置了自己的关键代码部分解析,关于emoji部分可查看笔者博客...

    JEditorPane/JTextPane常见操作(字体,颜色,字号,加粗,斜线,下划线,保存,行间距 等操作)以及HTML空格处理

    在Java的Swing库中,`JEditorPane`和`JTextPane`是两种非常重要的文本组件,它们允许用户编辑和显示富文本内容,包括不同的字体、颜色、字号、样式等。这两个组件都是`javax.swing.text`包的一部分,提供了丰富的...

    JAVA文本域显示不同字体颜色的文字

    在Java编程中,实现文本域显示不同颜色的文字主要涉及到Swing库中的JTextPane组件。JTextPane是一个可编辑的文本组件,支持富文本格式,能够处理不同的样式,包括字体、颜色等。以下是对这个主题的详细解释: 1. **...

    Java JTree+JTable应用

    本项目是关于如何在Java应用程序中结合使用这两种组件的一个示例,特别强调了如何将`JTree`的节点内容动态地显示到`JTable`中。 首先,我们来看`JTree`。`JTree`是用来展示树状数据结构的组件,如文件系统目录结构...

    java写的记事本程序带工具栏可以改变字体颜色

    JTextPane是Java Swing库中的一个高级文本组件,它允许进行格式化文本输入和显示,支持富文本格式(RTF)和HTML。 在Java编程中,Swing库是用于构建图形用户界面(GUI)的工具包。JTextPane是Swing的一部分,它可以...

    仿windows记事本

    这个项目利用了Java Swing库中的JTextPane组件来构建用户界面和处理文本操作。JTextPane是一个高级的文本组件,能够支持富文本格式,如字体样式、颜色以及图片的插入。 1. **JTextPane组件**:JTextPane是Java AWT...

    editedit

    【压缩包子文件的文件名称列表】中的"WebTextPaneDemo"可能是一个Java Swing的示例程序,用于演示如何在Java应用程序中使用JTextPane组件来展示和编辑HTML文本。JTextPane是Java AWT和Swing库中的一个组件,它扩展了...

    课程设计的任务书

    课程设计任务书是学生在学习过程中进行项目实践的重要文档,它详细规定了设计目标、内容、要求以及参考资料,旨在引导学生系统地进行课程实践,提升其编程技能和问题解决能力。在这个具体的任务书中,学生被要求设计...

Global site tag (gtag.js) - Google Analytics