我正在尝试验证一个"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);
}
}