我正在尝试使用以下项填充我的JComboBox:
public class DropDownItem {
private String text;
private int id;
public void setText(String text) {
this.text = text;
}
public void setId(int id) {
this.id = id;
}
public String toString() {
return text;
}
public int getId() {
return id;
}
public boolean equals(Object i) {
System.out.println("i is: " + i);
if(i instanceof Integer) {
if((Integer)i == (Integer)id) {
System.out.println("It's me!");
return true;
}
else {
System.out.println("I was asked if I was " + (Integer)i + " but I'm " + id + " as I'm " + text);
return super.equals(i);
}
}
else return super.equals(i);
}
}
但是我在使用JComboBox的setSelectedItem
时遇到了麻烦。我将setSelectItem
传递给了一个int,正如您从上面所看到的,我已经尝试确保它在正确的时候被选中。我遇到的问题是,只检查当前选中的项目,这对我来说很奇怪。我通过添加print语句来验证,该语句只打印一次..
有什么想法吗?
由于
答案 0 :(得分:3)
你的equals()方法的实现是错误的。 Object永远不会是一个整数,它永远是一个DropDownItem。我想通过比较当前Object的“id”和传递给equals()方法的Object的“id”来检查相等性。
编辑:如果您向模型添加新项目并想要选择它,您的代码应该是这样的:
DropDownItem item = new DropDownItem();
item.setId(1);
item.setText("one");
comboBox.addItem( item );
comboBox.setSelectedItem( item );
Edit2:equals方法看起来像:
DropDownItem item = (DropDownItem)i;
return getId() == item.getId();
现在,当您从数据库中获取整数值时,您可以这样做:
DropDownItem item = new DropDownItem();
item.setId(???);
comboBox.setSelectedItem( item );
即使你没有指定描述,也会选择该项,因为equals方法只关心id。