代码之家  ›  专栏  ›  技术社区  ›  Shahzaib

JComboBox按自身选择第一个项目

  •  0
  • Shahzaib  · 技术社区  · 12 年前

    我做了一个组合框,里面装满了数据库条目。我目前面临的问题是,当我写“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 回复  |  直到 12 年前
        1
  •  2
  •   camickr    12 年前

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

    然后使用:

    comboBox.setSelectedIndex(-1);
    

    在数据已经被加载之后。

    或者你可以用 Combo Box Prompt .

        2
  •  2
  •   kleopatra Aji kattacherry    12 年前

    这是不可编辑的JComboBox在添加到空框时的一个怪癖:

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

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

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

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

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