验证从组合框到列表的"Copy All"按钮中的数据



我正在尝试验证一个"Copy All"按钮,它只能从一个ComboBox中复制尚未出现在列表中的数据。

这是我的代码:

 String ele;      
    //if the List has 0 data, then it copies everything from the ComboBox        
    if(model.getSize()== 0){   
    for (int i = 0; i < cbxNum2.getItemCount(); i++) {
        ele = cbxNum2.getItemAt(i).toString(); 
        model.addElement(ele);        
    }
    //Trying to validate if the data is already on the List, so I can skip it.
    }else{
        for (int i = 0; i < cbxNum2.getItemCount(); i++) {
            ele = cbxNum2.getItemAt(i).toString();
            for (int j = 0; j < model.getSize(); j++) {
                if(!model.getElementAt(i).equals(ele)){
                    model.addElement(ele);
                }
            }   
        }
    }

当列表有0个项目时,它工作得很好,但是当我向组合框添加新项目并尝试将其复制到列表中时,我得到这个错误:

"AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2

model.getElementAt(i)应该是model.getElementAt(j),但要注意,在您当前的代码中,对于每个不等于ele的元素,您将把ele添加到model中,这将在每次迭代中增加模型的大小

一个更好的解决方案是检查ele是否在model中,只有当你找不到匹配时,添加它,也许是…

for (int i = 0; i < cbxNum2.getItemCount(); i++) {
    boolean found = false;
    ele = cbxNum2.getItemAt(i).toString();
    for (int j = 0; j < model.getSize(); j++) {
        if (model.getElementAt(j).equals(ele)) {
            found = true;
            break
        }
    }
    if (!found) {
        model.addElement(ele);
    }
}

最新更新