распознать отмену выделения при использовании моделей Swing +?
Вопрос
Я пытаюсь написать хороший графический интерфейс на Swing, который максимально использует правильный шаблон Model-Delegate. У меня есть JComboBox, который при изменении должен обновить модель с новыми данными. Чтобы получить выбранный в данный момент элемент, я использую:
fooCombo.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent arg0) {
fooChangedHandler((Foo) fooModel.getSelectedItem());
}
});
Который возвращает данные, на которые были изменены, как хороший объект. Однако я не могу найти способ узнать старое значение, поэтому я не знаю, какой объект необходимо изменить. Есть идеи здесь?
Решение
закончил тем, что вообще не пошел в модель, а получил свой объект из метода 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());
}
}
Другие советы
Foo oldFoo;
....
fooCombo.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent arg0) {
Foo newFoo = (Foo) fooModel.getSelectedItem();
fooChangedHandler(oldFoo, newFoo);
oldFoo = newFoo;
}
});
Поскольку ComboBoxModel и ItemEvent по умолчанию не позволяют получить ранее выбранное значение, вы можете реализовать собственную ComboBoxModel с этой функцией.