gpt4 book ai didi

java - 突出显示 jTextField 中用户输入搜索的所有单词

转载 作者:行者123 更新时间:2023-12-02 08:48:01 25 4
gpt4 key购买 nike

嘿,下面的所有代码都可以突出显示要搜索的所提供的单词,但如果句子中该单词不止一 (1) 个,那么它就找不到它。它仅在找到一 (1) 项匹配时停止。

private JFrame frame;
private static JTextField textField;
private static JTextField txtWorld;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CaretDemo window = new CaretDemo();
window.frame.setVisible(true);

String text = "hello world. How are you?";

textField.setText(text);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public CaretDemo() {
initialize();
}

private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);

textField = new JTextField();
textField.setBounds(21, 11, 350, 36);
frame.getContentPane().add(textField);
textField.setColumns(10);

txtWorld = new JTextField();
txtWorld.setColumns(10);
txtWorld.setBounds(21, 156, 350, 36);
frame.getContentPane().add(txtWorld);

JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Highlighter highlighter = textField.getHighlighter();
HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.pink);
int p0 = textField.getText().indexOf(txtWorld.getText());
int p1 = p0 + txtWorld.getText().length();

try {
highlighter.removeAllHighlights();
highlighter.addHighlight(p0, p1, painter);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
});

btnNewButton.setBounds(221, 203, 128, 29);
frame.getContentPane().add(btnNewButton);
}

上面的代码在运行时看起来像这样,并提供了单词“world”来查找。

enter image description here

但是现在,如果我添加到句子中并添加另一个“世界”,然后点击按钮,这就是它的样子:

enter image description here

如您所见,它仍然具有相同的突出显示单词,但也没有突出显示第二个 (2)“世界”。

更新1

我尝试使用正则表达式来循环并找到所需的单词。

btnNewButton_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("hi");
String theSentence = txtTheSentence.getText();
String WordToFind = txtWordToFind.getText();
Highlighter h = txtWordToFind.getHighlighter();

Pattern pattern = Pattern.compile("\\b"+WordToFind+"\\b", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(theSentence);

if(matcher.find()){
String extractedWord = matcher.group(0);
System.out.println(extractedWord);
}
}
});

但是这甚至没有找到一个单词。

最佳答案

it still has the same highlighted word without also highlighting the second (2) "world" -

这正是您的代码所做的。

首先删除所有突出显示,然后添加回单个突出显示。

如果您想要突出显示多个单词,那么您需要:

  1. 首先删除所有高亮部分,然后
  2. 编写一个循环并处理字符串中的所有文本。

找到匹配的文本后,您可以使用 String.indexOf(text, fromIndex) 方法从新索引继续搜索。

关于java - 突出显示 jTextField 中用户输入搜索的所有单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60959290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com