Atualizar itens no JComboBox sem remover os registros

4 respostas
java
M

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.

4 Respostas

D

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.

M

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.

D

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

M

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

Criado 1 de fevereiro de 2018
Ultima resposta 2 de fev. de 2018
Respostas 4
Participantes 2