-1

データベースエントリでいっぱいになっているコンボボックスを作成しました。私が現在直面している問題は、「H」と書くと、必要に応じて「H」で始まるすべての名前がリストに入力されますが、リストの名が自動的に選択されることです。この問題を回避する方法は?

String ch = text.getText();
if (ch.equals("")) {
    combo.setVisible(false);               
} else {                
    try {                  
        Class.forName("com.mysql.jdbc.Driver");
        Connection connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/userlogin", "root","12345");
        Statement st = connect.createStatement();
        ResultSet rs = st.executeQuery("SELECT author_name FROM scrpd_authors WHERE author_name LIKE '"+ ch + "%'");

        while (rs.next()) {
            String name = rs.getString("author_name");
            if (name.equals("")) {
                searchitems.addItem("");
            } else {
                searchitems.addItem(rs.getString("author_name"));
                searchitems.setVisible(true);                            
            }                        
        }
        connect.close();
    } catch (Exception ex) {
    }
 }

コンボボックスには、mysqlクエリに基づいて必要なすべてのエントリが入力されていることに注意してください。問題は、最初のエントリを単独で選択することだけです。

4

2 に答える 2

2

これは、空のボックスに追加するときの編集不可能なJComboBoxの癖です。

  • を使用addItem(item)すると、そのアイテムが選択されます
  • 使用insertItemAt(item, 0)すると、そのアイテムは選択されません

その癖は、塗りつぶしがモデルで行われるかビューで行われるかに依存しません-

したがって、モデルの入力後に選択を解除する(Robが提案する)オプションがない場合は、(ビューまたはモデルのいずれかで)挿入方法を使用できます。

// model 
model.addElementAt(item, model.getSizes();
// alternatively view
combo.insertItemAt(item, combo.getItemCount());

一般に、モデルに対してモデル操作を行うことをお勧めします(ビューのカバーメソッドに対して)。このようにして、ビューとは無関係にモデル処理を実装およびテストできます。

于 2013-03-21T16:55:21.227 に答える
2

リストの名が自動的に選択されます。この問題を回避する方法は?

次に、以下を使用します。

comboBox.setSelectedIndex(-1);

データがロードされた後。

または、コンボボックスプロンプトを使用することもできます。

于 2013-03-21T15:50:05.190 に答える