在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 Swing库中,`JTextPane`是一个功能强大的文本组件,它允许显示和编辑富文本格式,包括字体、颜色和排版等特性。本文将深入探讨`JTextPane`的基本概念、功能以及如何在Java应用程序中使用它。 #### 一、`...
在Java Swing库中,`JEditorPane`和`JTextPane`是两个常用的文本组件,它们主要用于显示和编辑富文本内容。在这个特定的程序中,我们看到的是一个演示如何控制这两类组件换行特性的应用。`JEditorPane`通常用于显示...
在给定的标题“JTextPane 关键字变色”和描述“SWT JTextPane 可以把控件中需要的字符串的颜色修改成自己想要的颜色”中,我们关注的主要知识点是`JTextPane`如何实现特定关键字的高亮显示,也就是改变颜色。...
JTextPane使用,可以传图片,文字等
1. **创建`JTextPane`实例**:首先,你需要创建一个`JTextPane`对象,将其添加到容器(如`JFrame`)中,以便在窗口中显示。 ```java JTextPane textPane = new JTextPane(); JFrame frame = new JFrame("JTextPane...
NULL 博文链接:https://icarusliu.iteye.com/blog/2098986
课程设计期间做的Java的桌面端小程序,可以发送Emoji表情的聊天室,另外在文件夹中放置了自己的关键代码部分解析,关于emoji部分可查看笔者博客...
在Java的Swing库中,`JEditorPane`和`JTextPane`是两种非常重要的文本组件,它们允许用户编辑和显示富文本内容,包括不同的字体、颜色、字号、样式等。这两个组件都是`javax.swing.text`包的一部分,提供了丰富的...
在Java编程中,实现文本域显示不同颜色的文字主要涉及到Swing库中的JTextPane组件。JTextPane是一个可编辑的文本组件,支持富文本格式,能够处理不同的样式,包括字体、颜色等。以下是对这个主题的详细解释: 1. **...
本项目是关于如何在Java应用程序中结合使用这两种组件的一个示例,特别强调了如何将`JTree`的节点内容动态地显示到`JTable`中。 首先,我们来看`JTree`。`JTree`是用来展示树状数据结构的组件,如文件系统目录结构...
JTextPane是Java Swing库中的一个高级文本组件,它允许进行格式化文本输入和显示,支持富文本格式(RTF)和HTML。 在Java编程中,Swing库是用于构建图形用户界面(GUI)的工具包。JTextPane是Swing的一部分,它可以...
这个项目利用了Java Swing库中的JTextPane组件来构建用户界面和处理文本操作。JTextPane是一个高级的文本组件,能够支持富文本格式,如字体样式、颜色以及图片的插入。 1. **JTextPane组件**:JTextPane是Java AWT...
【压缩包子文件的文件名称列表】中的"WebTextPaneDemo"可能是一个Java Swing的示例程序,用于演示如何在Java应用程序中使用JTextPane组件来展示和编辑HTML文本。JTextPane是Java AWT和Swing库中的一个组件,它扩展了...
课程设计任务书是学生在学习过程中进行项目实践的重要文档,它详细规定了设计目标、内容、要求以及参考资料,旨在引导学生系统地进行课程实践,提升其编程技能和问题解决能力。在这个具体的任务书中,学生被要求设计...