2013-03-21 19 views
-1

我制作了一个正在填充数据库条目的组合框。我目前面临的问题是,当我写入“H”时,根据需要列表中会填入所有以“H”开头的名称,但列表中的第一个名称将自动被选中。如何避免这个问题?JComboBox通过iteself选择第一个项目

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查询所有我想要的条目,问题只是由本身的第一项的选择。

+0

究竟应该选择什么呢?您可以使用侦听器,然后在填充列表后取消选择第一个条目。 – 2013-03-21 13:59:05

+0

确保第一个项目是一个空的'String'。 – tmwanik 2013-03-21 14:00:13

+0

为什么这是一个问题?最好的情况下,用户已经选择了正确的选项,最坏的情况下,他需要下移选择正确的选项,他也必须在你的方法中做。 – 2013-03-21 14:01:48

回答

2

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

然后使用方法:将数据加载

comboBox.setSelectedIndex(-1); 

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

2

那是不是编辑的JComboBox中添加一个空框时一个怪癖:

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

这怪癖选择该项目

  • 与填充发生在模型上还是视图上无关 - 因此如果在填充后取消选择模型(罗布的建议)是不是一种选择,你可以用插入的方法(在视图或型号):

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

    一般来说,建议做模型上的模型操作(与在视图上的覆盖方法) - 这种方式可以实现和测试独立于视图的模型处理。