searButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
String searText = searField.getText().trim();
if (searText.equals("")) {
JOptionPane.showMessageDialog(cont, "查找串为空", "提示信息",JOptionPane.INFORMATION_MESSAGE);
} else {
String allText = text.getText();
int start = allText.indexOf(searText, text.getSelectionEnd());
if (start == -1)
JOptionPane.showMessageDialog(container,"已到达文件末尾,没有找到\n" + searText, "提示信息",JOptionPane.INFORMATION_MESSAGE);
else
text.select(start, start + searText.length());
}
}
});
这是一个文本编辑器的查找功能实现 可以实现连续按钮实现连续查找,请问为什么这个监听器可以在查找的内容不变(连续按钮)的情况下 是接着上一个单词查找而不是再次从文本的开头查找
public void actionPerformed(ActionEvent event) {
String searText = searField.getText().trim();
if (searText.equals("")) {
JOptionPane.showMessageDialog(cont, "查找串为空", "提示信息",JOptionPane.INFORMATION_MESSAGE);
} else {
String allText = text.getText();
int start = allText.indexOf(searText, text.getSelectionEnd());
if (start == -1)
JOptionPane.showMessageDialog(container,"已到达文件末尾,没有找到\n" + searText, "提示信息",JOptionPane.INFORMATION_MESSAGE);
else
text.select(start, start + searText.length());
}
}
});
这是一个文本编辑器的查找功能实现 可以实现连续按钮实现连续查找,请问为什么这个监听器可以在查找的内容不变(连续按钮)的情况下 是接着上一个单词查找而不是再次从文本的开头查找
这句话吧
k >= Math.min(fromIndex, this.length()) && this.startsWith(str, k)
如果不存在这样的 k 值,则返回 -1。 参数:
str - 要搜索的子字符串。
fromIndex - 开始搜索的索引位置。
返回:
指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
getSelectionEnd
public int getSelectionEnd()
获取此文本组件中选定文本的结束位置。
返回:
选定文本的结束位置
另请参见:
setSelectionEnd(int), getSelectionStart()文档二:
indexOf
public int indexOf(String str,int fromIndex)
从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。返回的整数是最小值 k,它满足:
k >= Math.min(fromIndex, str.length()) && this.startsWith(str, k)
如果不存在这样的 k 值,则返回 -1。
参数:
str - 要搜索的子字符串。
fromIndex - 开始搜索的索引位置。
返回:
从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
最后把“int start = allText.indexOf(searText, text.getSelectionEnd());”拆成
int index = text.getSelectionEnd();
int start = allText.indexOf(searText, index);
这样是否明白了?