【发布时间】:2012-12-22 12:40:28
【问题描述】:
我使用JComboBox 从 sql 数据库中搜索查询。这是我的代码。
private void srKeyTyped(java.awt.event.KeyEvent evt){
sr.removeAllItems();
String sch = ((JTextField)sr.getEditor().getEditorComponent()).getText();
String schh = "SELECT * FROM tbl WHERE name LIKE '" + sch + "%';";
search = conn.getQuery(schh);
try {
while (search.next()) {
String item = search.getString("name");
sr.addItem(item);
}
} catch (SQLException ex) {
Logger.getLogger(dataprocess.class.getName()).log(Level.SEVERE, null, ex);
}
sr.setSelectedItem(null);
sr.setPopupVisible(true);
System.out.println(sch);
}
sr = JComboBox
但是当我在组合框中键入一个字母时,它会添加数据库中的所有项目。我知道System.out.println(sch); 总是给出一个空字符串。一旦我输入一个字母,组合框的文本字段就会变成空的(我不能输入一个有两个字母的单词)。如何解决这个问题?谢谢。
【问题讨论】:
-
removeAllItems 可能会清除编辑器(虽然没有挖掘)
-
在添加所有项目并显示弹出窗口后,也许只是尝试在编辑器上重新设置文本?
removeAllItems()确实会清除文本 -
在事件调度线程上执行数据库查询不是一个好主意,当然也不是在每次击键时。此外,您为什么可以访问该
KeyEvent。JComboBox的编辑器支持DocumentListeners,这几乎总是更好的选择 -
@kleopatra 是的,它清除了编辑器。但是删除它并不能解决问题。
-
@GuillaumePolet 我也试过了。原因是,可编辑组合框不充当
JTextField。sr.setSelectedItem(null);未选中且字段为空。
标签: java swing search jcombobox