我试图迭代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);
}
//}
}
}
}
});
任何解决方案吗?
答案 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));
}
}