JTextPane高亮显示文本

| 我可以从一个值开始到另一个值结束时将一些文本突出显示为
JTextPane
类似于以下内容,但带有黄色? \“ \” JTextPane突出显示文字“ \” 谢谢。     
已邀请:
通常,有几种可能性,具体取决于您对“突出显示”的实际含义:-) 通过在文档级别更改任意文本部分的样式属性来突出显示,例如
    SimpleAttributeSet sas = new SimpleAttributeSet();
    StyleConstants.setForeground(sas, Color.YELLOW);
    doc.setCharacterAttributes(start, length, sas, false);
通过textPane级别上的荧光笔突出显示:
    DefaultHighlighter.DefaultHighlightPainter highlightPainter = 
        new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
    textPane.getHighlighter().addHighlight(startPos, endPos, 
            highlightPainter);
    
https://web.archive.org/web/20120530071821/http://www.exampledepot.com/egs/javax.swing.text/style_HiliteWords.html
JTextArea textComp = new JTextArea();

// Highlight the occurrences of the word \"public\"
highlight(textComp, \"public\");

// Creates highlights around all occurrences of pattern in textComp
public void highlight(JTextComponent textComp, String pattern)
{
    // First remove all old highlights
    removeHighlights(textComp);

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

        // Search for pattern
        // see I have updated now its not case sensitive 
        while ((pos = text.toUpperCase().indexOf(pattern.toUpperCase(), pos)) >= 0)
        {
            // Create highlighter using private painter and apply around pattern
            hilite.addHighlight(pos, pos+pattern.length(), myHighlightPainter);
            pos += pattern.length();
        }
    } catch (BadLocationException e) {
    }
}

// Removes only our private highlights
public void removeHighlights(JTextComponent textComp)
{
    Highlighter hilite = textComp.getHighlighter();
    Highlighter.Highlight[] hilites = hilite.getHighlights();
    for (int i=0; i<hilites.length; i++)
    {
        if (hilites[i].getPainter() instanceof MyHighlightPainter)
        {
            hilite.removeHighlight(hilites[i]);
        }
    }
}

// An instance of the private subclass of the default highlight painter
Highlighter.HighlightPainter myHighlightPainter = new MyHighlightPainter(Color.red);

// A private subclass of the default highlight painter
class MyHighlightPainter extends DefaultHighlighter.DefaultHighlightPainter
{
    public MyHighlightPainter(Color color)
    {
        super(color);
    }
}
    
是的,您可以通过JTextPane继承的JTextComponent的setSelectionStart和setSelectionEndEnd函数。 看到 JTextComponent.setSelectionStart的javadoc     
您是否尝试过Java的字符串比较方法
.equalsIgnoreCase(\"Search Target Text\")
因为此方法允许搜索而不必考虑字符串的大小写 这可能是您要实现的目标的门票 希望这对您有所帮助     
性能明智的做法是将toUpperCase置于 字符串文本= doc.getText(0,doc.getLength()); 而不是在while循环中 但感谢您的好榜样。     

要回复问题请先登录注册