[英]Using JComboBox as a search box
我使用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);
总是给出一个空字符串。 只要我输入一个字母,组合框的文本字段就会变空(我不能输入带有两个字母的单词)。 如何解决这个问题? 谢谢。
您遇到问题的原因如下:
sch
总是空的是因为你正在调用sr.removeAllItems();
在调用String sch = ((JTextField)sr.getEditor().getEditorComponent()).getText();
之前String sch = ((JTextField)sr.getEditor().getEditorComponent()).getText();
。 这意味着在获得所选内容之前,将清除JComboBox
的内容(以及选择)。
解决方案:调用sr.removeAllItems();
在您获得所选项目之后。
组合框变为空,因为您调用sr.setSelectedItem(null);
在你重新填充它之后的最后。
解决方案:如果要输入文本,则输入sr.getEditor().setItem(scr);
只有想法,但尝试将方法的内容包含在if statement
并检查是否按下了Enter key
。 这样,方法内容将仅在输入所需字符串后执行,而不是每次按下键时执行。
使用ActionListener
而不是寻找按键。 编辑组合框的选择时,它将在编辑完成后触发ActionEvent
。
当你使这个部分工作时,你应该将这个逻辑移到另一个线程并在它返回时填充组合框的项目。 否则,您的UI将在SQL查询发生时挂起。
得到了解决方案。 这段代码工作正常。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.