2012-06-29 53 views
0

我在做的是,我正在创建动态下拉列表(jcombobox)。我正面临着第二个combox的问题。每当我从list1中选择一个名字的时候。列表显示其名称acc。首先列出那是好的,但是当我再次从列表1中选择一个不同的名称列表2继续显示以前的数据和新的数据... 即时通讯使用函数removeallitems()仍然无法从列表中删除以前的数据Swing Jcombobox

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]); 
    } 
    } 
} 

我在哪里我面临的问题,只给我的计划的一部分......

+0

下一次,请向我们提供格式代码... – brimborium

+0

你为什么你的列表复制到一个数组中?你可以直接在列表中循环'for(String s:districtlist){combo1.addItem(s);}'。删除循环中的removeItem,因为它什么也不做。下次你点击这样的东西时,使用一个调试器。 –

+0

执行查询不应发生在事件调度线程上。长时间运行的任务应该发生在工作者线程上以确保响应式用户界面。看看Oracle网站上的[并发中的摆动](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)教程,了解更多关于 – Robin

回答

3

您还没有清除出你的districtlist每次运行查询。这意味着每次查询时,您都要将以前查询中的项目添加到列表中。

请尝试这样做。

districtlist.clear(); 
while(rs2.next()) 
{ 
    districtlist.add(rs2.getString(1)); 

} 
+0

耶对 谢谢:) – ASH

+0

+1感谢您纠正我 – GETah

+0

没问题,我不得不承认这与名称相似的变量有点混淆。 –

1

while循环出现之前,你应该清楚你的产品清单。

districtlist.clear(); 
while(rs2.next()){ 
    //... 
} 
+0

你正在清除错误的变量。你指向的变量是数组,他应该清除的列表是根据我的答案区域列表。 –

+0

@JonTaylor哎呀,感谢您指出了这一点,复制了错误的变量。你值得+1 – GETah

+0

@both我看到districtlist.clear(),aaaaach不清楚(),list_district =新的JList(列表或其他) – mKorbel