【问题标题】:How can I iterate through JComboBox and Validate items如何遍历 JComboBox 并验证项目
【发布时间】:2016-04-20 08:36:02
【问题描述】:

我正在尝试遍历 JComboBox 项目,即它连接到数据库,每当我单击它时,它都会从数据库中获取数据并更新它。但在这种情况下它会添加重复值。我试图通过在添加到 JComboBox 后遍历每个项目来验证它,如果现有项目与我尝试添加的项目相似,则它不应添加并跳转到其他语句。

然而我得到空指针错误,为了避免这个错误我第一次添加counter -1,但是一旦添加了项目并想要更新,它就会出错。

我的 JComboBox 代码如下:

comboBox.addMouseListener(
            new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent ev) {
                    List<Guest> list = null;
                    list = database.readGuest();
                    int n = list.size();

                    if(n <= 0) {
                        JOptionPane.showMessageDialog(null, "No data found.");
                    }else {
                        for(int count = 0; count < n; count++) {
                            g = list.get(count);
                            String pass = g.getPassportNp();
                            //String s = (String) comboBox.getItemAt(count-1);
                            //for(int i = 0; i < n; ++i) {
                                if(comboBox.getItemCount() != 0) {
                                    if(comboBox.getItemAt(count-1).equals(pass)) {
                                        continue;
                                    }else {
                                        comboBox.addItem(pass);
                                    }
                                }else {
                                    comboBox.addItem(pass);
                                }
                            //}

                        }
                    }
                }
            });

有什么解决办法吗?

【问题讨论】:

  • 如何使用 Set 作为中间件或确保数据库不返回重复项?

标签: java eclipse jcombobox


【解决方案1】:

您不是在迭代组合框中的项目,而只是与其中的最后一个项目进行比较。您的基本设计应该是 2 个嵌套的 for 循环,一个用于检查数据库项目,一个用于检查组合框项目以检查当前数据库项目是否已在其中。 (您也可以使用List.contains 代替更清晰、更短的嵌套循环。

旁注:在组合框上注册鼠标侦听器似乎是这类工作的设计味道。从数据库中获取项目不是您想要在 EDT 上执行的操作,而是在后台线程中执行的操作。此外,您不知道首先会发生什么:打开/动画组合框(由 Swing 完成),还是修改其内容?这让人很难考虑控制流,这也是采取不同方法的另一个原因。

【讨论】:

    【解决方案2】:

    这是我想出的解决方案。希望对其他人有所帮助。

    我创建了一个列表,然后将所有项目添加到其中..

    int size = pass.size();
    if(comboBox.getItemCount() != 0) {
    
        comboBox.removeAllItems();
        for(int c = 0; c < size; ++c) {
            comboBox.addItem(pass.get(c));
            }
    }else {
         for(int c = 0; c < size; ++c) {
             comboBox.addItem(pass.get(c));
         }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多