Java JComboBox设置所选项目工作不正常
我正在尝试用以下项目填充我的JComboBox:Java JComboBox设置所选项目工作不正常,java,swing,jcombobox,Java,Swing,Jcombobox,我正在尝试用以下项目填充我的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; } pu
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,正如您从上面看到的,我试图确保它在正确的时候被选中。我遇到的问题是,只有当前选中的项目被选中,这对我来说非常奇怪。我通过添加打印语句验证了这一点,该语句只打印一次
有什么想法吗
谢谢您对equals()方法的实现是错误的。对象永远不会是整数,它将始终是DropDownItem。我想通过比较当前对象的“id”与传递给equals()方法的对象的“id”来检查相等性 编辑:如果将新项目添加到模型中并希望选择它,则代码应如下所示:
DropDownItem item = new DropDownItem();
item.setId(1);
item.setText("one");
comboBox.addItem( item );
comboBox.setSelectedItem( item );
DropDownItem item = (DropDownItem)i;
return getId() == item.getId();
Edit2:equals方法将类似于:
DropDownItem item = new DropDownItem();
item.setId(1);
item.setText("one");
comboBox.addItem( item );
comboBox.setSelectedItem( item );
DropDownItem item = (DropDownItem)i;
return getId() == item.getId();
现在,当您从数据库中获取整数值时,只需执行以下操作:
DropDownItem item = new DropDownItem();
item.setId(???);
comboBox.setSelectedItem( item );
即使您没有指定描述,也会选择该项,因为equals方法只关心id。但问题是,我正在向setSelectedItem传递一个整数(从数据库读取)。而且,在执行我的print语句时,对象一次是一个整数。可能数据库中的对象是一个整数,但组合框模型中的对象是“DropDownItem”。因此,整数永远不能等于DropDownItem。请参阅上面的“编辑”以获取示例代码。嗯,好吧,那么我如何根据数据库中的整数选择项目呢?我在第一次答复中解释了这一点。当“id”值相同时,您需要正确实现equals方法以返回true。然后,当您从数据库中获得一个整数时,您可以创建一个新的DropDownItem,只需设置ID值,然后将setSelectedItem用于该对象。