2013-08-05 106 views
1

我使用DefaultComboBoxModel和自定義項目填充組合框。每個項目都包含一個ID和一個名稱。我遍歷一個表,並基於選擇,我想從組合框中刪除選定的元素。對於我想刪除的項目,我從我正在迭代的表中獲取ID和名稱。我嘗試使用removeItem,它接受一個對象。我將ID和Name傳入我的自定義Item構造函數,但似乎不起作用。誰能告訴我我在這裏失蹤了什麼?刪除Jcombobox中的特定項目

代碼用於填充組合框:

Vector<Object> companyList = new Vector<Object>(); 
     while(rs.next()){ 
      companyList.addElement(new Item(rs.getInt(1),rs.getString(2))); 
     } 
DefaultComboBoxModel cmod = new DefaultComboBoxModel(companyList); 
     companyName.setModel(cmod); 

代碼自定義項目:

class Item 
{ 
    private int id; 
    private String name; 

    public Item(int id, String name) 
    { 
     this.id = id; 
     this.name = name; 
    } 

    public int getId() 
    { 
     return id; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public String toString() 
    { 
     return name; 
    } 
} 

代碼移除項目(硬編碼在這個例子中):

companyName.removeItem(new Item(50002,"ALLIED WASTE SYSTEMS")); 

的removeItem說它需要一個對象,所以我不知道爲什麼這不起作用。任何幫助,將不勝感激!

+0

應該是'companyList.removeItem(...'而不是'companyName ...'? –

+0

更好地幫助發佈[SSCCE]( http://sscce.org/),簡短,可運行,可編譯,與JCom「JFrame」相關boBox'基於你的類'Item',[可能基於](http://stackoverflow.com/a/14079963/714968),否則搜索'公共無效removeElementAt(INT索引){' – mKorbel

回答

5

您的班級Item不會覆蓋equals()hashCode(),以便「相等」的項目相等。您需要實施這兩種方法來滿足集合類所需的合同。

+0

謝謝。這很有道理。我想我需要花更多時間來理解Object類。對於任何其他人在這個問題上磕磕絆絆,下面的鏈接提供了關於Object類的equals和hashCode方法的一些很好的解釋: [Equals and Hash Code](http://www.javaranch.com/journal/2002/10) /equalhash.html) – SBaha

1

可以使用的臨時列表,其中將不包含要刪除該元素......

然後用臨時列表更改組合框模型......

DefaultComboBoxModel cmod = new DefaultComboBoxModel(tempCompanyList); 
    companyName.setModel(cmod); 

可以使用removeElementAt方法,因爲他們已經提到它...:D