如何迭代JComboBox并验证项目

时间:2016-04-20 08:36:03

标签: java eclipse jcombobox

我试图迭代JComboBox项目,即它连接到数据库,每当我点击它时,它从数据库中获取数据并更新它。但它在这种情况下添加重复值。我试图通过迭代每个项目一旦添加到JComboBox来验证它,如果现有项目类似于我试图添加的项目,那么它不会添加并跳转到其他语句。

但是我得到Null指针错误,为了避免在第一次添加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);
                                }
                            //}

                        }
                    }
                }
            });

任何解决方案吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

这是我弄清楚的解决方案。我希望能帮助别人。

我创建了一个List,然后将所有项目添加到它...

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));
     }
 }