【问题标题】:JComboBox selects the first item by iteselfComboBox 自行选择第一项
【发布时间】:2013-03-22 21:33:04
【问题描述】:

我已经创建了一个组合框,其中填满了数据库条目。我目前面临的问题是,当我写“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 查询填充了我想要的所有条目,问题只是选择了第一个条目本身。

【问题讨论】:

  • 那么究竟应该选择什么?您可以使用侦听器,然后在填充列表后取消选择第一个条目。
  • 确保第一项是空的String
  • 为什么会出现这个问题?最好的情况是用户已经选择了正确的选项,最坏的情况是他需要向下移动以选择正确的选项,这在您的方法中也必须这样做。
  • 另外,让搜索项在循环外可见。
  • 在我编写的用于在屏幕上打印所选项目的侦听器中,它最初会打印名字,然后是我单击的名称。

标签: java swing selection jcombobox


【解决方案1】:

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

然后使用:

comboBox.setSelectedIndex(-1);

加载数据后。

或者你可以使用Combo Box Prompt

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 2023-03-21
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多