KeyListener VS Key Binding for JField



我正在尝试使用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。但无论如何,这给了你一个很好的概念证明。

相关内容

  • 没有找到相关文章

最新更新