【问题标题】:HighLighting all match words Java突出显示所有匹配词 Java
【发布时间】:2016-11-30 02:49:02
【问题描述】:

我有一个TextArea,其中包含一个文档。我实现了DocumentListener 以突出显示与TextField 匹配的单词。

此代码的作用是突出显示单个单词而不是所有匹配项。即:如果我尝试在TextArea 中搜索“move”一词,并且该词重复了 3 次,则此代码仅突出显示第一个而没有其余的,我需要突出显示所有匹配的词!

public void search() throws BadLocationException //This method makes all logic for highLigh from jtextField into Document(TextArea)
    {
        highLighter.removeAllHighlights();
        String s = textField.getText();

        if(s.length() <= 0)
        {
            labelMessage("Nothing to search for..");
            return; //go out from this "if statement!".
        }

        String content = textArea.getText();
        int index = content.indexOf(s, 0); //"s" = the whole document, 0 = means that was found(match) or -1 if no match(no found is return -1)

        if(index >= 0) //match found
        {
            int end = index + s.length();
            highLighter.addHighlight(index, end, highlighterPainter);
            textArea.setCaretPosition(end);
            textField.setBackground(entryBgColor);
            labelMessage("'" + s + "' found. Press ESC to end search");
        }

    }

    void labelMessage(String msm)
    {
        statusLabel.setText(msm);
    }

    @Override
    public void changedUpdate(DocumentEvent e)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void insertUpdate(DocumentEvent e)
    {
        try
        {
            search();
        } catch (BadLocationException e1)
        {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

【问题讨论】:

  • 你搜索一次,你为什么期望它找到多个匹配项?
  • 根据您的代码,它只会显示第一次出现,更多您需要通过匹配其他索引来获取其他索引
  • @Idos 我需要找到多个匹配项,因为如果用户想找到“汉克”这个词,并且在文档中有 5 个汉克,我想给他其他匹配的可能性,而不仅仅是第一个..
  • @vickyexpert 确切地说,我需要其他索引,但我想自动生成它,而不必逐个索引引用索引,因为如果在 TextArea 中有 10 次相同的单词,我不能制作所有这些参考资料..有一种方法可以在不参考的情况下逐一制作吗?

标签: java documentlistener


【解决方案1】:

如果对你有帮助,试试下面的代码,

    String content = textArea.getText();

    while(content.lastIndexOf(s) >= 0)
    {
        int index = content.lastIndexOf(s);
        int end = index + s.length;

        highLighter.addHighlight(index, end, highlighterPainter);
        textArea.setCaretPosition(end);
        textField.setBackground(entryBgColor);
        labelMessage("'" + s + "' found. Press ESC to end search");

        content = content.substring(0, index - 1);
    }

【讨论】:

  • “i”变量是什么意思?在哪里声明?
  • 它是索引,抱歉按索引更改它
【解决方案2】:
final String s = textField.getText();

String content = textArea.getText();
boolean  b = content.contains(s);  
while (b) {
    int start = content.indexOf(stringToMatch);
    int end = start + s.length() -1;

    // Write your lighlighting code here

    if (content.length() >= end ) {
      content = content.substring(end, content.length()) ;
      b = content.contains(s);
    } else {
      b = false;
    }
}

这有帮助吗?

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2019-05-18
    • 2012-08-04
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多