我有一个文本字段和一个搜索按钮。如果用户输入正好13位数字(条形码),那么我想自动触发搜索。在文本字段中正好有13个字符时触发一个按钮
我在文本字段上有一个DocumentListener,并且正在处理insertUpdate方法以确定已输入了13位数字。我可以直接在那个时候调用搜索代码(并且它确实有效),但是尽管已经键入了第13个字符,但是在搜索完成之前它并不实际显示在屏幕上。
我宁愿而是触发搜索按钮,并尝试了两种方式:
DocumentListener dlBarcode = new DocumentAdaptor() {
public void insertUpdate(DocumentEvent e) {
String value = jtBarcode.getText();
if (isBarcode(value)) {
ActionEvent ae = new ActionEvent((Object)jbSearch,
ActionEvent.ACTION_PERFORMED, "");
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ae);
}
}
};
二是使用方法:
jbSearch.dispatch(ae);
这两种方法都似乎引起jbSearch的ActionListener的是触发。你能否建议我做错了什么?
我完全想他这么说。这很接近真实的答案,但我个人建议使用SwingWorker代替在后台执行搜索,然后在稍后对UI进行更新。 – 2010-12-12 07:10:50
感谢您的建议,并且我尝试过使用invokeLater,但第13个字符仍然只在搜索完成后才会绘制。从invokeLater的文档中,我会认为Event Dispatch线程会在调用搜索之前完成绘制文本字段,但看起来不是。我将尝试下一步使用SwingWorker。 – Geoff 2010-12-12 11:17:11