Combobox não preenche com resultado de pesquisa do banco

Olá amigos desenvolvedores, estou enfrentando uma dificuldade com preenchimento da minha comboBox quando realizo uma pesquisa na base de dados. Minha combobox possui uma ligação com uma tabela para população de dados da mesma, o código é o seguinte:

 private void cbCargoAncestorAdded(javax.swing.event.AncestorEvent evt) {                                      

    CargoController cc = new CargoController();

    List<Cargo> lista = cc.listarSetor();

    cbCargo.removeAll();
    for (Cargo c : lista) {
        this.cbCargo.addItem(c);
    }
}       

Com o código acima eu alimento meus dados na minha combobox isso funciona perfeitamente, porém quando realizo uma busca os dados da busca não preenchem o campo. Preencho meus campos da seguinte forma:

 ViewUsuario.idUsuario.setText(Integer.toString(usuario.getCodigoUsuario()));
                this.txtNome.setText(usuario.getNome());
                this.txtCpf.setText(usuario.getCpf());
                this.txtLogin.setText(usuario.getLogin());
                this.txtSenha.setText(usuario.getSenha());
                this.cbSetor.setSelectedItem(usuario.getSetor().getNome());
                this.cbCargo.setSelectedItem(usuario.getCargo().getCargo());

Ressalto que o objeto está preenchido, testei ultilizando um Soutprintln, porém quando faço a busca todos os outros campos são preenchidos menos as cbbox.

Desde já sou grato pela atenção e ajuda de todos, um forte abraço.

Poste a classe Cargo pra gente ver. Acredito que seja pela falta da implementação dos métodos equals e hashcode que o JCombobox.setSelectedItem deve usar para apresentar o item selecionado.

1 curtida

Olá Lucas segue as classes:

package cdeveloper.MODEL;

import Service.VerificaCargo;
import java.sql.SQLException;

public class Cargo {

    private String codigoCargo;
    private String cargo;

    public Cargo(String codigoCargo, String cargo) {
        this.codigoCargo = codigoCargo;
        this.cargo = cargo;
    }

    public Cargo(String cargo) {
        this.cargo = cargo;
    }

    public Cargo() {
    }

    public boolean verificarCargo(String cargo) throws SQLException {
        VerificaCargo vc = new VerificaCargo();

        if (vc.verificaExistCargo(cargo)) {
            return true;
        } else {
            return false;
        }
    }


    public String getCodigoCargo() {
        return codigoCargo;
    }

    public void setCodigoCargo(String codigoCargo) {
        this.codigoCargo = codigoCargo;
    }

    public String getCargo() {
        return cargo;
    }

    public void setCargo(String cargo) {
        this.cargo = cargo.toUpperCase();
    }
    
    @Override
    public String toString(){
        return this.getCargo();
    }

}

Implemente os métodos equals e hashcode usando a propriedade codigoCargo e veja se funciona. (geralmente as IDEs auxiliam na criação desses métodos)

1 curtida

Olá @Lucas_Camara obrigado pela atenção mais uma vez implementei como solicitou, porém não sei se precisa fazer algo na view pois não aconteceu nada. O Combobox continua sem preencher, segue abaixo como ficou o HashCode e Equals:

@Override
public int hashCode() {
    int hash = 5;
    hash = 41 * hash + Objects.hashCode(this.codigoCargo);
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Cargo other = (Cargo) obj;
    if (!Objects.equals(this.codigoCargo, other.codigoCargo)) {
        return false;
    }
    return true;
}

Codigo na minha View
BOTÂO SALVAR

  private void btnPesquisaUsuarioActionPerformed(java.awt.event.ActionEvent evt) {                                                   
    UsuarioController uc = new UsuarioController();
    Usuario usuario = new Usuario();

    if (this.validaPesquisa()) {
        JOptionPane.showMessageDialog(null, "Preencha o campo para realizar uma pesquisa", "ERRO", JOptionPane.ERROR_MESSAGE);
    } else {
        try {
            usuario = uc.buscaUsuario(this.txtPesquisaUsuario.getText());
            if (usuario.getLogin() == null) {
                System.out.println("Não existe");
            } else {
                ViewUsuario.idUsuario.setText(Integer.toString(usuario.getCodigoUsuario()));
                this.txtNome.setText(usuario.getNome());
                this.txtCpf.setText(usuario.getCpf());
                this.txtLogin.setText(usuario.getLogin());
                this.txtSenha.setText(usuario.getSenha());
                this.lblCargo.setText(usuario.getCargo().getCargo());
                this.lblSetor.setText(usuario.getSetor().getNome());
                this.cbSetor.setSelectedItem(usuario.getSetor().getNome());
                this.cbCargo.setSelectedItem(usuario.getCargo().getCargo());
            }
        } catch (Exception e) {
            System.out.println(usuario.getLogin());
            System.out.println("Erro na busca");
        }
    }
}        

METODO PARA PREENCHER COMBOBOX COM OBJETO

 private void cbSetorAncestorAdded(javax.swing.event.AncestorEvent evt) {                                      
    SetorController sc = new SetorController();

    List<Setor> lista = sc.listarSetor();

    for (Setor s : lista) {
        this.cbSetor.addItem(s);
    }
}

image

Qdo vc faz:

usuario.getCargo().getCargo()

Esse último getCargo() deve está retornando a descrição do Cargo. Tente adicionar o próprio cargo na combobox:

usuario.getCargo();

Como vc declarou a combobox cbCargo?

1 curtida

Era exatamente isso todos os processos descritos resolveram meu problema. Muito obrigado @Lucas_Camara foi de grande ajuda!!!

Segue Solução completa pessoal do que foi feito:
1º Implemente os métodos equals e hashcode usando a propriedade codigoCargo;

2º Esse último getCargo() deve está retornando a descrição do Cargo . Tente adicionar o próprio cargo na combobox:

usuario.getCargo();

Créditos da solução: @Lucas_Camara

1 curtida