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());
     }
    }
   });
这是一个文本编辑器的查找功能实现  可以实现连续按钮实现连续查找,请问为什么这个监听器可以在查找的内容不变(连续按钮)的情况下   是接着上一个单词查找而不是再次从文本的开头查找   

解决方案 »

  1.   

    int start = allText.indexOf(searText, text.getSelectionEnd());
    这句话吧
      

  2.   

    public int indexOf(String str,int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。返回的整数是满足下式的最小 k 值: 
         k >= Math.min(fromIndex, this.length()) && this.startsWith(str, k)
     如果不存在这样的 k 值,则返回 -1。 参数:
    str - 要搜索的子字符串。
    fromIndex - 开始搜索的索引位置。 
    返回:
    指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
      

  3.   

    那么每次按钮的时候alltext不都是相同的吗,那start每次按钮不就应该是一样的吗   但是实际上每次都是从上一次开始   难道alltext每按一次扭都会跟随变化吗
      

  4.   

    先看文档一:
    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);
    这样是否明白了?