2013-08-05 1 views
1

Я заполняю combobox, используя DefaultComboBoxModel и пользовательский элемент. Каждый элемент содержит идентификатор и имя. Я повторяюсь через таблицу, и на основе выбора я хотел бы удалить выбранные элементы из выпадающего списка. Для элементов, которые я хочу удалить, у меня есть идентификатор и имя из таблицы, через которую я выполняю итерацию. Я попытался использовать removeItem, который принимает объект. Я передаю идентификатор и имя в свой собственный конструктор элементов, но это не работает. Может ли кто-нибудь сказать мне, что мне здесь не хватает?Удаление определенного элемента из 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/), короткий, выполнимый, компилируемый, только о 'JFrame' с' JComboB ox' на основе вашего класса 'Item', [может быть основан на] (http://stackoverflow.com/a/14079963/714968), в противном случае поиск' public void removeElementAt (int index) {' – mKorbel

ответ

5

Ваш класс Item не переопределяет и hashCode(), так что товары "equal" сравниваются как равные. Вам необходимо реализовать эти два метода для удовлетворения контракта, требуемого классами сбора.

+0

Спасибо. Это имеет большой смысл. Я думаю, мне нужно больше времени, чтобы понять класс Object. Для всех, кто наткнулся на этот вопрос, следующая ссылка предоставила некоторые хорошие объяснения методам equals и hashCode класса Object: [Equals and Hash Code] (http://www.javaranch.com/journal/2002/10 /equalhash.html) – SBaha

1

вы можете использовать временный список, который не будет содержать тот элемент, который вы хотите удалить ...

затем изменить модель COMBOBOX с этим временным списком ...

DefaultComboBoxModel cmod = new DefaultComboBoxModel(tempCompanyList); 
    companyName.setModel(cmod); 

вы можете используйте метод removeElementAt, как они уже упоминали его ... D