Boa tarde pessoal, gostaria de popular minha combobox, sendo que meu programa esta em camadas.
como posso fazer?
publicclassProdutoDaoextendsGenericDao{publicList<Produto>findProdutos()throwsSQLException{List<Produto>produtos=newArrayList<Produto>();Stringselect="select * from produto order by id";PreparedStatementstmt=getConnection().prepareStatement(select);ResultSetrs=stmt.executeQuery();while(rs.next()){Produtoproduto=newProduto();produto.setId(rs.getLong("id"));produto.setDate(rs.getDate("dtCadastro"));produto.setUnidade(rs.getString("unidade"));produto.setNome(rs.getString("nome"));produto.setPrecoCusto(rs.getFloat("precoCusto"));produto.setLucro(rs.getFloat("lucro"));produto.setPrecoVenda(rs.getFloat("precoVenda"));produto.setEstoque(rs.getString("estoque"));produtos.add(produto);}rs.close();stmt.close();returnprodutos;}}publicclassProdutoController{publicList<Produto>listaProdutos(){ProdutoDaodao=newProdutoDao();try{returndao.findProdutos();}catch(SQLExceptione){JOptionPane.showMessageDialog(null,"Problemas ao localizar contaton"+e.getLocalizedMessage());}returnnull;}}
Como devo criar a combo, fazer um select para que ao abrir a tela meu combobox ja liste oque desejo?
Crie um ComboBoxModel para renderizar a lista de produtos obtida pelo método listaProdutos().
D
Diego_Gomes_Dias
Fiz campo assim
NO ProdutoDao
//RETORNA O CAMPO DESEJADO DE UMA TABELApublicListgetProduto()throwsSQLException{Listlist=newArrayList();PreparedStatementstm=getConnection().prepareStatement(“SELECT*FROMCLIENTE”);ResultSetrs=stm.executeQuery();while(rs.next()){Produtop=newProduto();p.setNome(rs.getString(“nome”));list.add§;}returnlist;}
Noprincipal//RETORNA O CAMPO DESEJADO DE UMA TABELApublicvoidExibeProdutos()throwsSQLException{Listlista=newProdutoDao().getProduto();for(Produtop:lista){System.out.println(p.getNome());}}
mas não consigo colocar em uma combox, pode me ajudar?
V
Vonquelbe_Cruz
D
Diego_Gomes_Dias
Cara eu achei otimo toda a estruturação, realmente perfeito.
Mas sou novato cara e pra mim ta bem mais compricado.
Eu criei meu combobox pelo WindowsDuinder, não teria como alterar esse codigo:
Se vc usar o “p” ao invés do seu método que provavelmente retorna o nome ( p.getNome() ) vc tem que reescrever o ToString no seu “Modelo” pra exibir a descrição, assim:
@OverridepublicStringtoString(){returndescricao;}
Neste caso, cada elemento do seu combo terá a sua classe de Produto (Objeto) e não apenas a descrição, que foi exatamente o que expliquei no meu Post.
Segue um exemplo mais pratico … basta copiar e testar e ver a melhor forma de corrigir seu projeto
packageacao;importjava.util.ArrayList;importjava.util.List;importjavax.swing.JComboBox;importjavax.swing.JFrame;importjavax.swing.JLabel;importmodao.EstadoDao;importmodao.EstadoMod;publicclassInicio{publicstaticvoidmain(String[]args){JFrametela=newJFrame("Testando ComboBox");tela.setSize(300,230);tela.setResizable(false);tela.setLocationRelativeTo(null);tela.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);// Container da telajava.awt.Containercontainer=tela.getContentPane();container.setLayout(null);// ComboBox simplesJLabelJLprd=newJLabel("Produtos");JComboBoxJCBox=newJComboBox(newString[]{"Café","Açucar","Feijão","Farinha"});// ComBoBox pegando de um Método que retorna o ArrayJLabelJLest=newJLabel("Estados");JComboBoxJCBest=newJComboBox();List<EstadoMod>lista=EstadoDao.listaDados();for(EstadoModp:lista){JCBest.addItem(p.getDescr());// JCBox.addItem(p.getNome());}// OUTRO EXEMPLO PEGANDO UM ARRAY CRIADO AQUIJLabelJLpai=newJLabel("Países");List<String>listagem=newArrayList();Stringobj[]=newString[]{"Argentina","Bolívia","Brasil","Equador"};for(inti=0;i<obj.length;i++){listagem.add(obj[i]);}JComboBoxJCBpai=newJComboBox(obj);// adiciona o Array// Posição JLprd.setBounds(10,20,100,50);JLest.setBounds(10,75,100,50);JLpai.setBounds(10,130,100,50);JCBox.setBounds(90,35,100,20);JCBest.setBounds(90,90,150,20);JCBpai.setBounds(90,145,150,20);// Adicionacontainer.add(JLprd);container.add(JLest);container.add(JLpai);container.add(JCBox);container.add(JCBest);container.add(JCBpai);// Exibetela.setVisible(true);}}
OBS.: “EstadoMod” é o meu modelo de Estados e “EstadoDao.listaDados” é o método que me retorna um arrays dos meus Estados na tabela, ai vc substitui pelo seu.
try{
PreparedStatementstatement=getConnection().prepareStatement(sql);ResultSetresult=statement.executeQuery(); while(result.next()){
lista.add(result.getString("nome"));//Adicione cada linha retornada do banco}result.close();statement.close();}catch(SQLExceptione){
e.printStackTrace();}
returnlista;//Retorne a lista de String com todos os nome do banco de dados
}