2012-06-29 47 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