Boa tarde pessoal, gostaria de popular minha combobox, sendo que meu programa esta em camadas.
como posso fazer?
public class ProdutoDao extends GenericDao {
public List<Produto> findProdutos() throws SQLException{
List<Produto> produtos = new ArrayList<Produto>();
String select = "select * from produto order by id";
PreparedStatement stmt =
getConnection().prepareStatement(select);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
Produto produto = new Produto();
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();
return produtos;
}
}
public class ProdutoController {
public List<Produto> listaProdutos(){
ProdutoDao dao = new ProdutoDao();
try{
return dao.findProdutos();
}catch(SQLException e){
JOptionPane.showMessageDialog(null,
"Problemas ao localizar contaton" +
e.getLocalizedMessage());
}return null;
}
}
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()
.
Fiz campo assim
NO ProdutoDao
//RETORNA O CAMPO DESEJADO DE UMA TABELA
public List getProduto() throws SQLException{
List list = new ArrayList();
PreparedStatement stm = getConnection().prepareStatement(“SELECT * FROM CLIENTE”);
ResultSet rs = stm.executeQuery();
while (rs.next()) {
Produto p = new Produto();
p.setNome(rs.getString(“nome”));
list.add§;
}
return list;
}
No principal
//RETORNA O CAMPO DESEJADO DE UMA TABELA
public void ExibeProdutos() throws SQLException{
List lista = new ProdutoDao(). getProduto();
for(Produto p : lista){
System.out.println(p.getNome());
}
}
mas não consigo colocar em uma combox, pode me ajudar?
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:
public void ExibeProdutos() throws SQLException{
List<Produto> lista = new ProdutoDao(). getProduto();
for(Produto p : lista){
JComboBox<String> JCBox = new JComboBox<String>();
JCBox.addItem(p.getNome());
}
}`
E quando abrir minha tela ele ja preecha o campo do combobox???`
Tente algo assim então:
List <Produto> lista = ProdutoDao().getProduto();
jComboBox JCBox = new JComboBox();
for(Produto p : lista){
JCBox.addItem(p); // JCBox.addItem(p.getNome());
}
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:
@Override
public String toString () {return descricao;}
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.
O codigo esta dessa forma:
public String ExibeProdutos1(String nome) throws SQLException{
List<Produto> lista = new ProdutoDao().getProduto();
JComboBox<String> JCBox = new JComboBox<String>();
for(Produto p : lista){
JCBox.addItem(p.getNome()); // JCBox.addItem(p.getNome());
}
return nome;
}
JComboBox<Produto> JCBox = new JComboBox<Produto>();
JCBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
JCBox.setBounds(319, 38, 75, 20);
contentPane.add(JCBox);
Porem ele exibe dessa forma:

Segue um exemplo mais pratico … basta copiar e testar e ver a melhor forma de corrigir seu projeto
package acao;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import modao.EstadoDao;
import modao.EstadoMod;
public class Inicio {
public static void main (String[] args) {
JFrame tela = new JFrame("Testando ComboBox");
tela.setSize(300,230);
tela.setResizable(false);
tela.setLocationRelativeTo(null);
tela.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
// Container da tela
java.awt.Container container = tela.getContentPane();
container.setLayout(null);
// ComboBox simples
JLabel JLprd = new JLabel("Produtos");
JComboBox JCBox = new JComboBox(new String[] {"Café","Açucar","Feijão","Farinha"});
// ComBoBox pegando de um Método que retorna o Array
JLabel JLest = new JLabel("Estados");
JComboBox JCBest = new JComboBox();
List<EstadoMod> lista = EstadoDao.listaDados();
for(EstadoMod p : lista){
JCBest.addItem(p.getDescr()); // JCBox.addItem(p.getNome());
}
// OUTRO EXEMPLO PEGANDO UM ARRAY CRIADO AQUI
JLabel JLpai = new JLabel("Países");
List <String> listagem = new ArrayList();
String obj[] = new String[] {"Argentina","Bolívia","Brasil","Equador"};
for (int i=0;i<obj.length;i++){
listagem.add(obj[i]);
}
JComboBox JCBpai = new JComboBox(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);
// Adiciona
container.add(JLprd);
container.add(JLest);
container.add(JLpai);
container.add(JCBox);
container.add(JCBest);
container.add(JCBpai);
// Exibe
tela.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.




Eu fiz desta vez mas mesmo assim não funciona.
ClienteDao
public List listaClientes() {
String sql = “select * from cliente order by id”;
List lista = new ArrayList();//Crie uma lista para armazenar os dados do banco
try {
PreparedStatement statement = getConnection().prepareStatement(sql);
ResultSet result = statement.executeQuery();
while(result.next()) {
lista.add(result.getString("nome"));//Adicione cada linha retornada do banco
}
result.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
return lista;//Retorne a lista de String com todos os nome do banco de dados
}
Tela Principal com a ComboBox
JComboBox comboBox = new JComboBox();
comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
ClienteDao dao = new ClienteDao();
List<String> lista = dao.listaClientes();
for(String nome : lista) {
comboBox.setSelectedItem(nome);
}
}
});
comboBox.setBounds(343, 12, 102, 20);
contentPane.add(comboBox);
Ja utilizei addItem e setSelectedItem mas nenhum dos dois funcionou.
Como adicionar os itens na combobox???
JComboBox comboBox = new JComboBox();
// comboBox.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent arg0) {
ClienteDao dao = new ClienteDao();
List<String> lista = dao.listaClientes();
for(String nome : lista) {
comboBox.addItem(nome);
}
// }
// });
Como citei anteriormente, utilize um ComboBoxModel
para renderizar sua lista de objetos e não vai mais se incomodar.
Exemplo de modelo:
class MeuModelo<T> extends DefaultComboBoxModel<T> {
@Override
public int getSize() {
return minhaListaDeObjetos.size();
}
@Override
public T getElementAt(int index) {
T objeto = minhaListaDeObjetos.get(index);
return objeto.propriedadeQueQueroApresentar();
}
}
Exemplo de uso:
JComboBox combo = new JComboBox(new MeuModelo());