Popular jcombobox ao abrir a mesma

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());