reconnaître la liste déroulante désélectionnée lors de l’utilisation des modèles Swing +?

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

Question

J'essaie d'écrire une belle interface graphique dans Swing qui utilise autant que possible le bon modèle-délégué. J'ai un JComboBox qui, une fois modifié, doit mettre à jour le modèle avec les nouvelles données. Pour obtenir l'élément actuellement sélectionné, j'utilise:

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

Ce qui retourne ce que les données ont été changé en un joli objet. Cependant, je ne peux pas trouver un moyen de retrouver l'ancienne valeur, donc je ne sais pas quel objet doit être changé. Des idées ici?

Était-ce utile?

La solution

a fini par ne pas aller du tout dans le modèle mais obtenir mon objet de la méthode getItem comme ceci:

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

Autres conseils

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

En tant que ComboBoxModel et ItemEvent par défaut, vous ne pouvez pas obtenir la valeur précédemment sélectionnée, vous pouvez implémenter votre propre ComboBoxModel avec cette fonctionnalité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top