2009-03-05 9 views
1

Я пытаюсь написать хороший графический интерфейс в Swing, который максимально использует шаблон Model-Delegate. У меня есть JComboBox, который при изменении нуждается в обновлении модели новыми данными. Чтобы получить выбранный элемент, я использую:признать, что combobox отменяет выбор при использовании моделей Swing +?

fooCombo.addItemListener(new ItemListener() { 
    public void itemStateChanged(final ItemEvent arg0) { 
     fooChangedHandler((Foo) fooModel.getSelectedItem()); 
    } 
}); 

Что возвращает данные, которые были изменены в качестве прекрасного объекта. Однако я не могу найти способ узнать старое значение, поэтому я не знаю, какой объект нужно изменить. Есть идеи?

ответ

2

в конечном итоге не собирается модель вообще, но получить мой объект из метода GetItem следующим образом:

public void itemStateChanged(final ItemEvent event) { 
    if (event.getStateChange() == event.DESELECTED) { 
     deselectedFoo = (Foo) event.getItem(); 
    } 
    else if (event.getStateChange() == event.SELECTED) { 
     FooChangedHandler(deselectedFoo,(Foo) event.getItem()); 
    } 
} 

0

Поскольку ComboBoxModel и ItemEvent по умолчанию не позволяют вам получить ранее выбранное значение, вы можете реализовать свой собственный ComboBoxModel с помощью этой функции.

1
Foo oldFoo; 
.... 
fooCombo.addItemListener(new ItemListener() { 
    public void itemStateChanged(final ItemEvent arg0) { 
     Foo newFoo = (Foo) fooModel.getSelectedItem(); 
     fooChangedHandler(oldFoo, newFoo); 
     oldFoo = newFoo; 
    } 
}); 
+0

Я согласен, что это самое простое решение. Тем не менее, я предложил пользовательский ComboBoxModel, поскольку Киран говорит, что он хочет как можно больше использовать шаблон Model-Delegate. Я бы сказал, что это нарушает этот шаблон, сохраняя последний выбранный элемент вне модели. – Mark