-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 的一个怪癖:

  • usingaddItem(item)将选择该项目
  • usinginsertItemAt(item, 0)不会选择该项目

这个怪癖与填充是发生在模型上还是发生在视图上无关——

因此,如果在填充模型后取消选择(如 Rob 所建议)不是一个选项,您可以使用 insert 方法(在视图或模型上):

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

通常,建议对模型进行模型操作(相对于视图上的覆盖方法)——这样您就可以独立于视图来实现和测试模型处理。

于 2013-03-21T16:55:21.227 回答
2

列表中的名字会自动被选中。如何避免这个问题?

然后使用:

comboBox.setSelectedIndex(-1);

加载数据后。

或者,也许您可​​以使用Combo Box Prompt

于 2013-03-21T15:50:05.190 回答