我使用DefaultComboBoxModel和自定义Item填充组合框。每个项目都包含一个ID和一个名称。我正在遍历一个表,并根据选择,我想从组合框中删除选定的元素。对于我想删除的项目,我有我正在迭代的表中的ID和名称。我尝试使用removeItem接受一个对象。我将ID和Name传递给我的自定义Item构造函数,但这似乎不起作用。谁能告诉我这里缺少什么?
填充组合框的代码:
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说它接受一个Object所以我不确定为什么这不起作用。任何帮助将不胜感激!
答案 0 :(得分:5)
您的班级Item
不会覆盖equals()
和hashCode()
,因此“相等”的项目会相等。您需要实现这两个方法来满足集合类所需的契约。
答案 1 :(得分:1)
您可以使用临时列表,该列表不包含您要删除的元素...
然后用那个临时列表改变你的组合框模型......
DefaultComboBoxModel cmod = new DefaultComboBoxModel(tempCompanyList);
companyName.setModel(cmod);
您可以使用removeElementAt
方法,因为他们已经提到过......:D