Atualizar itens no JComboBox sem remover os registros

Galera, boa noite.

Tenho um evento na minha aplicação Java Swing to tipo: formWindowActivated. Esse evento serve para verificar se houve a inclusão de algum elemento de outros JFrames, Exemplo.:

é um cadastro de logradouros, o usuário não encontrou o bairro para aquele logradouro, então tenho um JButtun que chama a tela de bairros, ele adiciona o bairro, e com o evento do outro JFrame formWindowActivated, faço a verificação e adiciono apenas esse elemento na lista, porem se o usuário quiser fazer um update no nome do bairro, esse elemento não é atualizado no JcomboBox, segue o código:

private void formWindowActivated(java.awt.event.WindowEvent evt) {                                     
        try 
        {
            EstadoDao daoE = new EstadoDao();
            if(cbBoxEstados.getItemCount() != daoE.listar().size()){
                carregaBoxEstados();
            }

            CidadeDao daoC = new CidadeDao();
            Estado e;
            int indexE = cbBoxEstados.getSelectedIndex();
            e = daoE.listar().get(indexE);
            if(cbBoxCidades.getItemCount() != daoC.listar(e).size())
                carregaBoxCidades(e);

            BairroDao daoB = new BairroDao();
            Cidade c;
            int indexC = cbBoxCidades.getSelectedIndex();
            c = daoC.listar(e).get(indexC);
            if(cbBoxBairros.getItemCount() != daoB.listar(c).size())
                carregaBoxBairros(c);

            TipoDao daoT = new TipoDao();
            if(cbBoxTipoLogradouro.getItemCount() != daoT.listar().size())
                carregaBoxTipoLogradouros();
            
        } catch (Exception e) {}

o código acima está funcional, porém só serve para verificar se foi cadastrado um novo bairro, cidade, etc. Gostaria de uma forma para quando o objeto fosse apenas atualizado, exemplo.: um bairro que mudou de novo, fizesse a atualização no JComboBox.

Eu não sei qual seria a forma correta de fazer isso, mas eu faria o seguinte, criaria uma tabela Atualizações que contem os campos Tabela e UltimaAtualizacao. Quando a tabela Estado fosse atualizado, a tabela Atualizações seria atualizado na linha {Estado, 02/02/2018}, se fosse Cidade, então {Cidade, 02/02/2018} (hora omitido), assim o programa verificaria a data/hora da última atualização e atualizaria os combobox se fosse necessário. Da forma como está, se for removido e inserido ou atualizasse, o programa não conseguiria identificar a atualização, pois está sendo comparado apenas as quantidades.

AtualizacoesDao a = new AtualizacoesDao();
Calendar estadoUA = a.obterUltimaAtualizacao("Estado");
if (!estadoUA.equals(this.estadoUA)) {
  this.estadoUA = estadoUA;
  atualizarEstados();
}

Uma alternativa seria atualizar sem nenhuma verificação.

Sua dica foi boa, porém eu quero fazer utilizando o JComboBox. No momento em que vou atualizar os itens, não queria utilizar o JComboBox.removeAllItens(). Em cada JComboBox tenho um evento ItemStateChange pegando o objeto posicionado e carregando outros comboBox em cascata!

Exemplo .: No momento em que carrego o JComboBox de estados, eu carrego um ArrayList com todos os seus objetos, depois comparo o dao.listar() atual com os objetos existentes nesse ArrayList. Se os textos forem diferentes, eu utilizo o método JcomboBox.setSelectedItem(objeto o), pego o index deste objeto, utilizo o comando JcomboBox.removeItemAt(int index) para remover ele de dentro do box, e adiciono o novo elemento com JComboBox.InsertItemAt(objeto o, int x) na posição dele, porém não tive sucesso por causa da mudança dos index de cada objeto.

Não entendi muito bem, mas acho que seria melhor criar seu próprio ComboBoxModel:

http://www.linhadecodigo.com.br/artigo/3664/comboboxmodel-em-java.aspx
http://www.java2s.com/Tutorial/Java/0240__Swing/JComboBoxUsingtheCustomModel.htm

1 curtida

Obrigado por essa informação, vou ler com calma e te retorno.