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);
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
是的,您可以通过JTextPaneinheritance的JTextComponent函数setSelectionStart和setSelectionEnd 。
请参阅JTextComponent.setSelectionStart的javadoc
你尝试过java的字符串比较方法吗?
.equalsIgnoreCase("Search Target Text")
因为此方法允许搜索而不必考虑字符串的大小写这可能是您要实现的目标的票证
希望这可以帮助你Makky
性能方面,最好将toUpperCase放在上面
String text = doc.getText(0,doc.getLength());
而不是在while循环中
但感谢这个好榜样。