распознать отмену выделения при использовании моделей Swing +?

StackOverflow https://stackoverflow.com/questions/613981

Вопрос

Я пытаюсь написать хороший графический интерфейс на 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 с этой функцией.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top