0

を使用して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);常に空の文字列が返されることを知りました。そして、文字を入力するとすぐに、コンボボックスのテキストフィールドが空になります(2文字で単語を入力できません)。これを修正する方法は?ありがとうございました。

4

3 に答える 3

1

ActionListenerキー プレスを検索する代わりに、を使用します。コンボボックスの選択が編集されるとActionEvent、編集が完了すると が発生します。

この部分が機能するようになったら、このロジックを別のスレッドに移動し、戻ったときにコンボボックスの項目を設定する必要があります。そうしないと、SQL クエリの実行中に UI がハングします。

于 2013-01-08T16:05:21.917 に答える
1

問題の理由は次のとおりです。

  1. schは常に空です。これは、呼び出すsr.removeAllItems();前に呼び出しているためですString sch = ((JTextField)sr.getEditor().getEditorComponent()).getText();。これはJComboBox、選択されたものを取得する前に、の内容が (選択とともに) クリアされることを意味します。

    sr.removeAllItems();解決策:選択したアイテムを取得した後に呼び出します。

  2. sr.setSelectedItem(null);再設定した後に最後に呼び出すため、コンボ ボックスは空になります。

    解決策:入力したテキストが必要な場合sr.getEditor().setItem(scr);

と考えただけですが、メソッドの内容を で囲み、が押されているif statementかどうかを確認してみてください。Enter keyそうすれば、メソッドの内容は、キーが押されるたびにではなく、目的の文字列が入力された後にのみ実行されます。

于 2013-01-08T16:01:10.253 に答える
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);
  }

スケピ、クレオパトラ、ギヨーム・ポレに感謝

于 2013-01-08T16:30:01.400 に答える