Bom dia !
Estou tentando popular uma combobox com dados de uma tabela do meu banco, mas ao executar o que aparece é isso: Imagem
Já não sei mais o que fazer.
Tentei usando comboboxmodel: DefaultComboBoxModel defaultComboBox = null; try { defaultComboBox = new DefaultComboBoxModel(categoriaDAO.listarCategoriaReceita().toArray()); } catch (Exception ex) { Logger.getLogger(Transacoes.class.getName()).log(Level.SEVERE, null, ex); } cbCategoria.setModel(defaultComboBox)
Tentei usando Iterator:
`private void comboReceitas() {
cbCategoria.removeAllItems(); //remove os itens atuais do comboBox.
ArrayList produtos = null;
try {
produtos = categoriaDAO.listarCategoriaReceita(); //'produtoDAO' é meu objeto que retorna os produtos do banco.
} catch (Exception ex) {
Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
}
Iterator i = produtos.iterator();
while(i.hasNext()) {
cbCategoria.addItem(String.valueOf(i.next()));
}`
DAO:
` public ArrayList<Categoria> listarCategoriaReceita() throws Exception {
ConexaoBanco c = new ConexaoBanco();
String sql = "SELECT * FROM Categoria";
PreparedStatement ps = c.getConexao().prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ArrayList listaCategoriaReceita= new ArrayList();
while (rs.next()) {
Categoria categoria= new Categoria();
categoria.setDesc_categoria(rs.getString("Des_Categoria"));
listaCategoriaReceita.add(categoria);
}
return listaCategoriaReceita;
}`
Para exibir o nome do cachorro sem chamar o getNome, deve-se sobrescrever o método toString() da classe Object
public class Cachorro {
...
public String toString() {
return this.nome;
}
}
Cachorro cachorro = new Cachorro();
cachorro.setNome("Doguinho");
/*
Aqui printará Doguinho, pois toda vez que eu passo o próprio objeto para ser exibido,
o java chama o método toString internamente
e eu disse pro meu método toString exibir o nome
*/
System.out.println(cachorro);
Solução 2:
Antes de adicionar ao combobox, você deve fazer o casting do objeto do iterator ou definir o Iterator como sendo um Iterator da sua classe, pois por padrão o iterator.next() retorna Object
Ex (Iterator de cachorro):
Iterator<Cachorro> i = cachorros.iterator();
while(i.hasNext()) {
cbCachorro.addItem(i.next().getNome());//i.next() agora retorna um objeto do tipo Cachorro por causa do <Cachorro> definiado ao lado de Iterator
}
Ex (Casting)
Iterator i = cachorros.iterator();
while(i.hasNext()) {
Cachorro cachorro = (Cachorro) i.next(); //Convertendo de Object para Cachorro
cbCachorro.addItem(cachorro.getNome());
}
O que ele está exibindo ai é o endereço de memória do objeto categoria. acredito que você precise sobrescrever o método toString da sua classe Categoria.
ou você altera o seguinte trecho:
Iterator i = produtos.iterator();
while(i.hasNext()) {
cbCategoria.addItem(String.valueOf(i.next()));
}
de modo que você adicione em cbCategoria o atributo Desc_categoria da sua classe Categoria.