【发布时间】:2012-06-30 23:24:35
【问题描述】:
我正在做的是,我正在创建动态下拉列表 (jcombobox)。我面临第二个组合框的问题。每当我从 list1 中选择一个名称时,秒。列表显示其名称acc。首先列出没关系,但是当我再次从 list1 中选择不同的名称时,list2 继续显示以前的数据和新数据... 我正在使用函数 removeallitems() 仍然无法从 list2 中删除以前的数据
public void itemStateChanged(ItemEvent e) {
if (e.getSource() == combo) {
statename = (String)combo.getSelectedItem();
try {
ResultSet rs2 =s.executeQuery("select distinct district_name from district_master where state_code=(select state_code from state_master where state_name='"+statename+"') order by district_name ");
while(rs2.next()) {
districtlist.add(rs2.getString(1));
}
list_district = new String [districtlist.size()];
districtlist.toArray(list_district);
} catch(Exception f) {
f.printStackTrace();
System.out.println(f);
}
combo1.setEnabled(true);
combo1.removeAllItems();
for (int i = 0; i < list_district.length; i++) {
combo1.removeItem(list_district[i]);
combo1.addItem(list_district[i]);
}
}
}
我只给出了我面临问题的程序的一部分......
【问题讨论】:
-
下次请提供格式化代码...
-
为什么要将 List 复制到数组中?可以直接在列表
for(String s: districtlist) {combo1.addItem(s);}上循环。删除循环内的 removeItem ,因为它不执行任何操作。下次遇到这样的事情时,请使用调试器。 -
不应在事件调度线程上执行查询。长时间运行的任务应该发生在工作线程上,以确保响应式 UI。请查看 Oracle 网站上的 Concurrency in Swing 教程,了解更多关于如何使用和为什么使用的详细信息
标签: java swing jdbc jcombobox itemlistener