0

我使用 aJComboBox从 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);总是给出一个空字符串。一旦我输入一个字母,组合框的文本字段就变成空的(我不能输入一个有两个字母的单词)。如何解决这个问题?谢谢你。

4

3 回答 3

1

您的问题的原因如下:

  1. sch总是空的是因为你在打电话sr.removeAllItems();之前先打电话String sch = ((JTextField)sr.getEditor().getEditorComponent()).getText();。这意味着JComboBox在您获得所选内容之前,会清除 的内容(连同所选内容)。

    sr.removeAllItems();解决方案:在您获得所选项目后致电。

  2. 组合框变为空,因为您sr.setSelectedItem(null);在重新填充后最后调用。

    解决方案:如果您想要输入的文本,那么sr.getEditor().setItem(scr);

只有和想法,但尝试将方法的内容包含在 an 中if statement并检查是否Enter key按下。这样,方法内容只会在输入所需的字符串后执行,而不是每次按下键时执行。

于 2013-01-08T16:01:10.253 回答
1

使用 anActionListener而不是寻找按键。当组合框的选择被编辑时,它会在编辑完成时触发ActionEvent

当你让这部分工作时,你应该把这个逻辑移到另一个线程,并在它返回时填充组合框的项目。否则,您的 UI 将在 SQL 查询发生时挂起。

于 2013-01-08T16:05:21.917 回答
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

于 2013-01-08T16:30:01.400 回答