【发布时间】:2011-08-06 03:47:41
【问题描述】:
我可以在JTextPane 中突出显示从一个值开始并从另一个值结束的一些文本吗
像下面这样,但颜色是黄色的?
"" JTextPane 高亮文本“”
谢谢。
【问题讨论】:
我可以在JTextPane 中突出显示从一个值开始并从另一个值结束的一些文本吗
像下面这样,但颜色是黄色的?
"" JTextPane 高亮文本“”
谢谢。
【问题讨论】:
通常有几种可能性,具体取决于“突出显示”的真正含义:-)
通过在文档级别更改任意文本部分的任何样式属性来突出显示,例如
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);
【讨论】:
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);
}
}
【讨论】:
是的,您可以通过 JTextComponent 的 JTextPane 继承的函数 setSelectionStart 和 setSelectionEnd。
【讨论】:
你试过java的字符串比较方法吗
.equalsIgnoreCase("Search Target Text")
因为这种方法允许在不考虑字符串大小写的情况下进行搜索 这可能是您想要实现的目标的门票
希望这对你有帮助
【讨论】:
最好将 toUpperCase 放在性能上
字符串文本 = doc.getText(0, doc.getLength());
而不是在while循环中
但感谢你的好例子。
【讨论】: