我正在尝试使用JTextField进行动态搜索也就是说,我需要在每次按下一个键(例如,我按下一个">a")时查询对象列表。并获得所有包含&;A&;的条目,然后添加&;l&;以及所有没有">Al"在它被过滤掉,然后是">Ali", "最后">Alice"). 我真的不需要将键与任何特定的操作相关联,所以我的问题是:是否足以使用KeyListener要覆盖这个功能吗?
我实际上不会使用这两种工具。有一个工具是定制的,可以做你正在谈论的事情。它被称为DocumentListener。
这是一个演示代码。
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class DocumentListenerExample
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setLocationByPlatform(true);
JTextField field = new JTextField();
Document doc = field.getDocument();
doc.addDocumentListener(
new DocumentListener()
{
public void changedUpdate(DocumentEvent e) {}
public void removeUpdate(DocumentEvent e) {}
public void insertUpdate(DocumentEvent e)
{
try
{
System.out.println(e.getDocument().getText(e.getOffset(), e.getLength()));
}
catch (Exception exception)
{
System.err.println(exception);
}
}
}
);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(field);
frame.setVisible(true);
}
}
我从我的JTextField中提取了文档,然后我添加了一个匿名的DocumentListener,它的DocumentListener::insertUpdate方法只是打印出刚刚使用Document::getText, documenttevent::getOffset和documenttevent::getLength插入的字符串。
出于您的目的,您可能想要获取所有文本,而不仅仅是刚刚插入的String。但无论如何,这给了你一个很好的概念证明。