Minha JCombobox não está carregando itens do banco

6 respostas Resolvido
java
J

Olá, eu estou estudando programação java e estou barrado num problema na minha jcombobox no netbeans, que não carrega os itens do banco. Ele carrega alguns endereçamentos mas não carrega os dados da tabela.

Combobox%20(2)

Como posso resolver esse problema?

View Cadastro de Viagens:

public class CadastroViagens extends javax.swing.JFrame {

/**
 * Creates new form Viagens
 */
public CadastroViagens() {
    initComponents();
    this.setLocationRelativeTo(null);
    
    VeiculosDAO dao = new VeiculosDAO();
    for(Veiculos v:dao.findAll()) {
        cbVeiculo.addItem(new Object[]{
            v.getId()
    });
    }
}

Classe Viagens DAO

public List findAll(){

String sql = "SELECT * FROM Viagens INNER JOIN Motoristas ON Motoristas.idMotoristas = Viagens.Motorista INNER JOIN Veiculos ON Veiculos.idVeiculos = Viagens.veiculo";

    
    PreparedStatement stmt = null;
    ResultSet rs = null;
    
    List<Viagens> viagenses = new ArrayList<>();
    try {
        stmt = con.prepareStatement(sql);
        rs = stmt.executeQuery();
        
        while(rs.next()){
            Viagens viagens = new Viagens();
            viagens.setId(rs.getInt("idViagens"));
            viagens.setData(rs.getDate("Data"));
            viagens.setDestino(rs.getString("Destino"));
            Motorista motorista = new Motorista();
            motorista.setId(rs.getInt("Motorista"));
            Veiculos veiculos = new Veiculos();
            veiculos.setId(rs.getInt("Veiculo"));
            viagenses.add(viagens);
        }
    } catch (SQLException ex) {
        System.out.println("Erro"+ex);
    }finally{
        ConnectionFactory.closeConection(con, stmt, rs);
    }
    return viagenses;
}

Classe Model Viagens

public class Viagens {

int id;

String destino;

Date data;

Motorista motorista;

Veiculos veiculo;
public Viagens() {
}

public Viagens(String destino, Date data, Motorista motorista, Veiculos veiculo) {
    this.destino = destino;
    this.data = data;
    this.motorista = motorista;
    this.veiculo = veiculo;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getDestino() {
    return destino;
}

public void setDestino(String destino) {
    this.destino = destino;
}

public Date getData() {
    return data;
}

public void setData(Date data) {
    this.data = data;
}

public Motorista getMotorista() {
    return motorista;
}

public void setMotorista(Motorista motorista) {
    this.motorista = motorista;
}

public Veiculos getVeiculo() {
    return veiculo;
}

public void setVeiculo(Veiculos veiculo) {
    this.veiculo = veiculo;
}

}

Classe de conexão com o banco

public class ConnectionFactory {

private static final String USUARIO = root;

private static final String SENHA = jrodrigues;

private static final String URL = jdbc:mysql://127.0.0.1:3306/SisJBD”;

private static final String DRIVER = com.mysql.jdbc.Driver;
// Conectar ao banco
public static Connection getConnection(){
    try {
        Class.forName(DRIVER);
        
        return DriverManager.getConnection(URL,USUARIO,SENHA);
        
    } catch (ClassNotFoundException | SQLException ex) {
       throw new RuntimeException("ERRO NA CONEXÃO", ex);
    }
}

public static void closeConection(Connection con){
    if (con != null) {
        try {
            con.close();
        } catch (SQLException ex) {
            System.err.println("Erro"+ex);
        }
    }
}
public static void closeConection(Connection con, PreparedStatement stmt){
    if (stmt != null) {
        try {
            stmt.close();
        } catch (SQLException ex) {
            System.err.println("Erro"+ex);
        }
    }
    
    closeConection(con);
}
 public static void closeConection(Connection con, PreparedStatement stmt, ResultSet rs){
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException ex) {
            System.err.println("Erro"+ex);
        }
    }
    
    closeConection(con,stmt);
}

6 Respostas

I

Na verdade ela está, mas está mostrando o identificador do objeto (um código que identifica cada instância do objeto). Poste o método que tu usou para populá-lo. Contudo, posso supor que tu colocou algo como:

cbVeiculo.addItem(v);

mas para ser mais útil, é interessante acessar algum de seus atributos, como por exemplo:

cbVeiculo.addItem(v.getModelo());

Exemplo:

NUMERO_MIN_REGISTROS = 3;

private void popularComboVeiculo(){
	try{
		veiculos = dao.Veiculos.pesquisar();
		cbVeiculos.removeAllItems();
		cbVeiculos.addItem("Selecione...");
		
		for(bean.Veiculo veiculo : veiculos){
			cbVeiculos.setMaximumRowCount(NUMERO_MIN_REGISTROS);
			cbVeiculos.addItem(veiculo.getModelo());
		}
	}catch(SQLException sqle){
		System.out.println("Impossível popular o combo com os veiculos. ERRO: " 
				+ sqle.getMessage());
	}
}
J
Solucao aceita

Uma alternativa é você fazer da seguinte forma, na sua classe model de veículos sobrescreva o método toString() colocando os dados que gostaria de exibir.

Exemplo:

@Override
public String toString() {
    return this.descricaoVeiculo;
}

Pra preencher você pode fazer algo dessa forma:

public void carregarComboBox(JComboBox combo, List<T> lista) {
        DefaultComboBoxModel comboModel = (DefaultComboBoxModel) combo.getModel();
        combo.setModel(comboModel);
        try {                
            comboModel.removeAllElements();
            for (int linha = 0; linha < lista.size(); linha++) {
                comboModel.addElement(lista.get(linha));
            }
        } catch (Exception e) {
            comboModel.removeAllElements();                
        }
    }
I

@Jonathan_Medeiros, aproveitando a oportunidade se eu usar o toString() eu tenho problemas em usar JComboBox encadeados? Em um de meus projetos, me deparei com esse problema, ou seja, em caso de uma alteração cadastral, não ‘setava’ no JComBox ‘escravo’ o item.

J

Cara, eu nunca tive esse problema, porque eu sempre refazia o load dos objetos das combos dependentes em caso de modificação do registro pai.

J

Valeu, fiz o que você disse e deu certo. Obrigado!

J

Vou usar esse na próxima…

Criado 9 de outubro de 2019
Ultima resposta 9 de out. de 2019
Respostas 6
Participantes 3