Подтвердить что ты не робот

Текст подсветки JTextPane

Можно выделить какой-то текст в JTextPane, начиная с значения и заканчивая другим значением например, с желтым цветом?

" "JTextPane выделить текст" "

Спасибо.

4b9b3361

Ответ 1

Как часто есть несколько возможностей, в зависимости от того, что вы действительно имеете в виду под "подсветкой": -)

Выделите, изменив атрибуты стиля произвольных текстовых частей на уровне документа, что-то вроде

    SimpleAttributeSet sas = new SimpleAttributeSet();
    StyleConstants.setForeground(sas, Color.YELLOW);
    doc.setCharacterAttributes(start, length, sas, false);

Выделите с помощью маркера на уровне текстовой панели:

    DefaultHighlighter.DefaultHighlightPainter highlightPainter = 
        new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
    textPane.getHighlighter().addHighlight(startPos, endPos, 
            highlightPainter);

Ответ 2

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);
    }
}

Ответ 3

Да вы можете с помощью функций setSelectionStart и setSelectionEnd от JTextComponent, из которых JTextPane наследуется.

см javadoc из JTextComponent.setSelectionStart

Ответ 4

Вы попытались использовать метод сопоставления строки java

.equalsIgnoreCase("Search Target Text")

Поскольку этот метод позволяет выполнять поиск без необходимости учитывать случай строки Это может быть билет на то, что вы пытаетесь достичь.

Надеюсь, это поможет вам Makky

Ответ 5

лучше всего использовать toUpperCase для

Строковый текст = doc.getText(0, doc.getLength());

а не в цикле while

но спасибо за хороший пример.