2010-10-20 2 views
1

я пытаюсь заполнить свою 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; 
} 

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, и, как вы можете видеть сверху, я попытался убедиться, что он выбран, когда он правильный. Проблема, с которой я столкнулась, заключается в том, что проверяется только текущий выбранный элемент, что для меня очень странно. Я подтвердил это, добавив заявление о печати, которое только распечатывается один раз ..

Любые идеи?

Thanks

ответ

3

Ваша реализация метода equals() неверна. Объект никогда не будет Integer, он всегда будет DropDownItem. Я бы предположил, что равенство будет проверяться путем сравнения «id» текущего объекта с «id» объекта, переданного методу equals().

Edit: Если вы добавляете новый элемент в модели и хотите, чтобы выбрать его код должен быть что-то вроде:

DropDownItem item = new DropDownItem(); 
item.setId(1); 
item.setText("one"); 
comboBox.addItem(item); 
comboBox.setSelectedItem(item); 

Edit2: метод равно будет выглядеть примерно так:

DropDownItem item = (DropDownItem)i; 

return getId() == item.getId(); 

Теперь, когда вы получаете целое значение из базы данных вы можете просто сделать:

DropDownItem item = new DropDownItem(); 
item.setId(???); 
comboBox.setSelectedItem(item); 

Даже если вы ди dn't указать описание, элемент будет выбран, потому что метод equals заботится только об идентификаторе.

+0

Но дело в том, что я передаю setSelectedItem целое число (считанное из базы данных). А также, объект является Integer один раз, поскольку мой оператор печати выполняется. – jtnire

+0

Возможно, объект из базы данных является Integer, но объекты в комбинированной коробке - это «DropDownItem». Поэтому Integer никогда не может быть равен DropDownItem. См. «Edit» сверху для примера кода. – camickr

+0

Hmm ok then, так как бы я пошел о выбранном элементе на основе только целого из базы данных? – jtnire