2013-08-05 73 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