Pregunta

Estoy tratando de escribir una buena GUI en Swing que use el patrón apropiado de Modelo-Delegado tanto como sea posible. Tengo un JComboBox que, cuando se cambia, necesita actualizar el modelo con los nuevos datos. Para obtener el elemento seleccionado actualmente, estoy usando:

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

Lo que devuelve a lo que se modificó la información como un buen objeto. Sin embargo, no puedo encontrar una manera de averiguar el valor anterior, por lo que no sé qué objeto debe cambiarse. ¿Alguna idea aquí?

¿Fue útil?

Solución

terminé sin ir al modelo en absoluto, pero obteniendo mi objeto del método getItem así:

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());
    }
}

Otros consejos

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

Como ComboBoxModel e ItemEvent predeterminados no le permiten obtener el valor seleccionado anteriormente, puede implementar su propio ComboBoxModel con esta función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top