Domanda

Sto cercando di scrivere una bella interfaccia grafica in Swing che usi il modello delegato modello corretto il più possibile. Ho un JComboBox che, una volta modificato, deve aggiornare il modello con i nuovi dati. Per ottenere l'elemento attualmente selezionato, sto usando:

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

Che restituisce ciò che i dati sono stati modificati come un bel oggetto. Tuttavia, non riesco a trovare un modo per scoprire il vecchio valore, quindi non so quale oggetto debba essere modificato. Qualche idea qui?

È stato utile?

Soluzione

ha finito per non andare affatto al modello ma ottenere il mio oggetto dal metodo getItem in questo modo:

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

Altri suggerimenti

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

Poiché ComboBoxModel e ItemEvent predefiniti non consentono di ottenere il valore precedentemente selezionato, è possibile implementare il proprio ComboBoxModel con questa funzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top