Java jtextpane仅高亮显示第一个实例
我试图突出显示jtextpane中的多个单词。但是,我只能突出显示找到的第一个实例Java jtextpane仅高亮显示第一个实例,java,swing,for-loop,Java,Swing,For Loop,我试图突出显示jtextpane中的多个单词。但是,我只能突出显示找到的第一个实例 String key = "are"; Highlighter h = test.outputPane.getHighlighter(); String text = test.outputPane.getText(); String arr[] = text.split("[\\p{Punct}\\s]+"); for (int i = 0; i < arr.length; i++) { Stri
String key = "are";
Highlighter h = test.outputPane.getHighlighter();
String text = test.outputPane.getText();
String arr[] = text.split("[\\p{Punct}\\s]+");
for (int i = 0; i < arr.length; i++) {
String temp = arr[i];
if (temp.equals(key)) {
try {
h.addHighlight(text.indexOf(temp), text.indexOf(temp) + temp.length(), DefaultHighlighter.DefaultPainter);
} catch (BadLocationException ex) {
Logger.getLogger(crawler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
String key=“are”;
Highlighter h=test.outputPane.getHighlighter();
String text=test.outputPane.getText();
字符串arr[]=text.split([\\p{Punct}\\s]+”;
对于(int i=0;i
h.addHighlight(text.indexOf(temp),text.indexOf(temp)+temp.length(),DefaultHighlighter.DefaultPainter)代码>将始终突出显示文本中第一次出现的临时值。由于temp等于您的搜索键,它将只突出显示您的搜索键的第一次出现
您需要改进您的迭代代码…问题是只“返回指定子字符串第一次出现的字符串中的索引”。您可以使用,它还将“从指定的索引开始”
例如:
import javax.swing.*;
import java.awt.event.*;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.border.LineBorder;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
public class Example {
JTextPane textPane;
public Example() {
JFrame frame = new JFrame();
textPane = new JTextPane();
textPane.setText("are warehouse are arearea are rare");
hightlightAll("are");
frame.setContentPane(textPane);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private void hightlightAll(String word) {
Highlighter highlighter = textPane.getHighlighter();
String text = textPane.getText();
String[] words = text.split("[\\p{Punct}\\s]+");
int lastIndex = 0;
for (String str : words) {
lastIndex = text.indexOf(str, lastIndex);
int endIndex = lastIndex + str.length();
if (str.equals(word)) {
try {
highlighter.addHighlight(lastIndex, endIndex, DefaultHighlighter.DefaultPainter);
} catch (BadLocationException e) {
}
}
lastIndex = endIndex;
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Example();
}
});
}
}
你好请提供一份报告。这不足以重现问题。感谢您的回复。根据您的输入,我注意到它在第一个实例之后停止循环。非常感谢。我会调查的。@LuxxMiner的解决方案的问题是,它也会突出“仓库”中的“是”。@ThomasKläger谢谢你指出这一点,我更新了我的答案。嗨,谢谢。在参考了您的解释后,我得到了这部分内容。@kenAu89我编辑了代码,现在它应该只突出显示“are”一词,而不是“ravel”中的“are”