我正在尝试遍历 JComboBox 项目,即它连接到数据库,每当我单击它时,它都会从数据库中获取数据并更新它。但是在这种情况下它会添加重复值。我试图通过遍历添加到 JComboBox 的每个项目来验证它,如果现有项目与我尝试添加的项目相似,则它不会添加并跳转到其他语句。
但是,为了避免第一次添加 counter -1
时出现此错误,我得到了 Null pointer 错误,但是一旦添加了项目并想要更新,它就会出错。
我的 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 个嵌套的 for 循环,一个用于遍历数据库项,一个用于遍历组合框项以检查当前数据库项是否已经存在。 (您也可以使用 List.contains 而不是更清晰、更短的嵌套循环)。
旁注:在组合框上注册鼠标监听器似乎是此类工作的设计风格。从数据库中获取项目不是您想要在 EDT 上执行的操作,而是在后台线程中执行的操作。此外,您不知道首先会发生什么:打开/动画组合框(由 Swing 完成),或修改其内容?这让我们很难考虑控制流,这也是采用不同方法的另一个原因。
关于java - 如何遍历 JComboBox 并验证项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738190/