我使用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);
总是给出一个空字符串。只要我输入一个字母,组合框的文本字段就会变空(我不能输入带有两个字母的单词)。如何解决这个问题?谢谢。
答案 0 :(得分:1)
您遇到问题的原因如下:
sch
始终为空,因为您在致电sr.removeAllItems();
之前呼叫String sch = ((JTextField)sr.getEditor().getEditorComponent()).getText();
。这意味着在获得所选内容之前,JComboBox
的内容将被清除(连同选择)。
解决方案:在获得所选项目后调用sr.removeAllItems();
。
组合框变空,因为您在重新填充后会在结束时调用sr.setSelectedItem(null);
。
解决方案:如果您想要输入的文字,请sr.getEditor().setItem(scr);
仅限和想法,但尝试将方法的内容括在if statement
中,并检查是否按下了Enter key
。这样,方法内容将仅在输入所需字符串后执行,而不是每次按下键时执行。
答案 1 :(得分:1)
使用ActionListener
而非寻找按键。编辑组合框的选择时,编辑完成后将激活ActionEvent
。
当你使这个部分工作时,你应该将这个逻辑移到另一个线程并在它返回时填充组合框的项目。否则,在SQL查询发生时,您的UI将挂起。
答案 2 :(得分:0)
得到了解决方案。这段代码工作正常。
private void srKeyTyped(java.awt.event.KeyEvent evt){
String sch = ((JTextField)sr.getEditor().getEditorComponent()).getText();
String schh = "SELECT * FROM tbl WHERE name LIKE '" + sch + "%';";
search = conn.getQuery(schh);
sr.removeAllItems();
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);
}
System.out.println(sch);
sr.setSelectedItem(null);
sr.setPopupVisible(true);
((JTextField)sr.getEditor().getEditorComponent()).setText(sch);
}
感谢Skepi,Kleopatra,Guillaume Polet