ComboBox单独选择第一个项目

时间:2013-03-21 13:57:15

标签: java swing selection jcombobox

我制作了一个正在填充数据库条目的组合框。我目前面临的问题是,当我写" 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查询,组合框中填充了所有我想要的条目,问题只在于选择第一个条目。

2 个答案:

答案 0 :(得分:2)

  

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

然后使用:

comboBox.setSelectedIndex(-1);

加载数据后。

或许您可以使用Combo Box Prompt

答案 1 :(得分:2)

这是添加到空盒子时不可编辑的JComboBox的怪癖:

  • 使用addItem(item)将选择该项
  • 使用insertItemAt(item, 0)将不会选择该项

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

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

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

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