Могу ли я выделить некоторый текст в JTextPane
, начиная со значения и заканчивая другим значением, как показано ниже, но желтым цветом?
"" JTextPane выделить текст ""
Спасибо.
Могу ли я выделить некоторый текст в JTextPane
, начиная со значения и заканчивая другим значением, как показано ниже, но желтым цветом?
"" JTextPane выделить текст ""
Спасибо.
Как часто есть несколько возможностей, в зависимости от того, что вы действительно подразумеваете под «изюминкой» :-)
Выделите, изменив любые атрибуты стиля произвольных частей текста на уровне документа, например
SimpleAttributeSet sas = new SimpleAttributeSet();
StyleConstants.setForeground(sas, Color.YELLOW);
doc.setCharacterAttributes(start, length, sas, false);
Выделите с помощью Highlighter на уровне textPane:
DefaultHighlighter.DefaultHighlightPainter highlightPainter =
new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
textPane.getHighlighter().addHighlight(startPos, endPos,
highlightPainter);
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);
}
}
Да, вы можете использовать функции setSelectionStart и setSelectionEnd из JTextComponent, от которого наследуется JTextPane.
см. javadoc JTextComponent. setSelectionStart
Вы пробовали метод сравнения строк Java
.equalsIgnoreCase("Search Target Text")
Поскольку этот метод позволяет выполнять поиск без учета регистра строк. Это может быть билетом к тому, чего вы пытаетесь достичь.
Надеюсь, это поможет вам Макки
с точки зрения производительности лучше включить toUpperCase
Строковый текст = doc.getText(0, doc.getLength());
а не в цикле while
но спасибо за хороший пример.