Java Swing如何在边缘情况下工作?

时间:2013-06-13 12:33:39

标签: java swing jtextarea swing-highlighter

我有这段代码:

JTextArea textComp;

Highlighter hilite = textComp.getHighlighter();

if (word.toString().equals(pattern[i])) 
{
    hilite.addHighlight(posStart, (posEnd), myHighlighter);
    break;
}

wordStringBuilder

假设if中的条件匹配且hilite.addHighlight(posStart, (posEnd), myHighlighter); - 此语句将执行。 然后textComp包含

  

int myVar

我试着像这样突出

  

int myVar

那时,posStart = 0posEnd = 3。但是当我在textArea进入某个东西时,荧光笔会像这样延伸到最后:

  

int myVar

任何人都可以帮我吗?

如果我发表声明:

hilite.addHighlight(posStart, (posEnd-1), myHighlighter);

然后使用posStart=0, posEnd=3,然后只有

  在 * t myVar中

*   有时候是这样的。即" in"突出显示但是" t"不是!

修改 功能:

Highlighter.HighlightPainter myHighlighter = new MyHighlightPainter(
                    Color.LIGHT_GRAY);

            try {
                Highlighter hilite = textComp.getHighlighter();
                Document doc = textComp.getDocument();
                String text = doc.getText(0, doc.getLength());
                String[] words = text.split(" ");

                                int posEnd, posStart = 0;
                while (text.length() > posStart) {
                    posEnd = posStart;
                    StringBuilder word = new StringBuilder();
                    while (posEnd < text.length() && text.charAt(posEnd) != ' ') {
                        word.append(text.charAt(posEnd++));
                    }
                    for (int i = 0; i < pattern.length; i++) {

                        if (word.toString().equals(pattern[i])) {
                            hilite.addHighlight(posStart, (posEnd-1), myHighlighter);
                            break;
                        }

                    }
                    posStart = posStart + posEnd + 1;
                }
            } catch (BadLocationException e) {
            }

3 个答案:

答案 0 :(得分:1)

  

实际上我想知道这款荧光笔是如何工作的!

是的,API令人困惑。我相信第一个索引是包容性的,最后一个索引是独占的。

每当我在搜索单词时突出显示,我都会使用以下代码:

String text = "one two three four...";
String search "three";

int offset = text.indexOf(search);

if (offset != -1)
    textPane.getHighlighter().addHighlight(offset, offset + search.length(), painter);

答案 1 :(得分:0)

您的问题似乎并不是荧光笔如何突出显示文本,而是在编辑文本时突出显示如何变化。您可以通过向TextArea添加更改侦听器并根据需要调整受影响的突出显示(使用changeHighlight())来处理此问题。

答案 2 :(得分:0)

我这样做是为了解决问题:

int wordEnd = 0, wordStart = 0;




Highlighter hilite = textComp.getHighlighter();
                        Document doc = textComp.getDocument();
                        String text = doc.getText(0, doc.getLength());

                        while (text.length() > wordEnd) 
                        {
                            String word = new String();
                            if(text.charAt(wordEnd) == ' ')
                            {
                                word = text.substring(wordStart, wordEnd);
                                for (int i = 0; i < pattern.length; i++) 
                                {
                                        if (word.toString().equals(pattern[i])) 
                                        {
                                            hilite.addHighlight(wordStart, (wordEnd), myHighlighter);

                                            break;
                                        }
                                }
                                wordStart = wordEnd + 1;
                            }
                            wordEnd++;
                        }

我所做的是通过检测后面的空格(你可以扩展逻辑)然后突出显示前一个单词来获得一个单词。通过打字,这是持续的。