Pergunta

Eu estou tentando escrever uma GUI agradável no Swing que usa o padrão Modelo-Delegado adequada, tanto quanto possível. Eu tenho um JComboBox que, quando alterados, precisa atualizar o modelo com os novos dados. Para obter o item selecionado no momento, estou usando:

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

que retorna o que os dados foram alterados como um objeto agradável. No entanto, eu não consigo encontrar uma maneira de descobrir o valor antigo, então eu não sei qual necessidades objeto a ser alterado. Todas as ideias aqui?

Foi útil?

Solução

acabou não indo para o modelo em tudo, mas recebendo meu objeto do método getItem assim:

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

Outras dicas

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

Como o padrão ComboBoxModel e ItemEvent não permite obter o valor selecionado anteriormente você poderia implementar sua própria ComboBoxModel com esse recurso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top