ComboBox não atualiza com registros novos

Fala galera. Estou inserindo novos valores no banco, e gostaria que o comboBox fosse atualizado quando eu terminasse de fazer a inserção… Para isso tenho esse método que atualiza o comboBox conforme eu insiro os valores…

`public void atualizaComboBox() {

    try {
        //comboBoxLogradouro.removeAllItems();
        conexaoBancoLogradouro.executaSQL("SELECT * FROM logradouro");
        conexaoBancoLogradouro.resultset.first();

      
        /* Enquanto tiver registro armazenado no proximo de resultSet */
        while (conexaoBancoLogradouro.resultset.next()) {
            /* Adiciona no comboBox o item que esta em resultSet (Tabela BD)
             que no caso vai ser o nome do endereço . */
            comboBoxLogradouro.addItem(conexaoBancoLogradouro.resultset.getString("nome"));

        }

        /* Acessando o primeiro item armazenado em resultset */
        conexaoBancoLogradouro.resultset.first();

    } catch (SQLException erro) {
        JOptionPane.showMessageDialog(null, "Não Localizou Dados" + erro);
    }
}`

A questão é a seguinte, pela lógica eu teria que remover todos os itens que estão atualmente no comboBox, e depois que um novo é inserido, eles são todos inseridos novamente no comboBox de novo.

Porém quando eu utilizo o comando
comboBoxLogradouro.removeAllItems();

Ele remove os itens, mas na hora que eu insiro um registro, e abro o comboBox, apenas tem um item lá dentro…

Agora se eu deixar comentado e não executar a linha que citei acima, quando insiro um valor no banco e abro o comboBox, o valor novo esta lá… Porém todos os registros estão duplicados, triplicados…

Acredito que você esteja usando swing, então vou me basear nisso.
Olhando a documentação, o método removeAllItems() só deve ser usado se o modelo do seu combox for do tipo MutableComboBoxModel.

void removeAllItems() - Remove one or more items from the combo box’s menu. These methods require that the combo box’s data model be an instance of MutableComboBoxModel.

Você pode atribuir uma instancia nova do combox ao invés de usar o método removeAllItems(), a instancia vai criar um novo objeto e assim, limpar o conteúdo antigo.

1 curtida

então, a questão é que quando eu utilizo o removeAllItens(), ele funciona a remove os itens, porém quando entra no laço de repetição while, é adicionado apenas o primeiro item da minha tabela.

Enquanto se eu não utilizar o removeAllItens() ele quando entra no laço while, adiciona todos itens, até mesmo o inserido por último, porém quando lista o comboBox, os dados estão replicados.!

Olha, talvez funcione se você usar um objeto do tipo DefaultComboBoxModel e um ArrayList. Ficando:

String item = "";
DefaultComboBoxModel model;
ArrayList<String> lista = new ArrayList<>();
while(...){
     item = conexaoBancoLogradouro.resultset.getString("nome");
     lista.add(item);
}
model = new DefaultComboBoxModel(lista); //não testei, mas taivez precise evocar o método toArray() de lista
comboBoxLogradouro.setModel(lista);

É uma possibilidade…Mas o certo seria você criar um modelo personalizado de ComboBox.

1 curtida

Gabriel, você é o cara.
Não sei como agradecer, deu certo, usei o toArray() e funcionou da maneira como eu queria.

Muito obrigado mesmo!

1 curtida