Popular JComboBox com dados do banco !AJUDAAAAA[RESOLVIDO]

Ola, estou querendo popular um JComboBox com os dados vindos do banco. pra isso eu tenho um metodo na classe ServicoDAO chamado ConsultaNoBanco, q e responsavel po buscar no banco. E tenho um JFrame chamado Agenda onde tenho um JComboBox. Estou querendo popular esse JComboBox, como faco? Estou tentando com array list mas nao ta dando. Aqui o metodo ConsultaNoBanco:

public ArrayList ConsultaNoBanco() {
         servico = new ArrayList();
         //fornPojo = new forn();
         SingletonBd.connecta.conecta("bancoSalao");
         this.con = SingletonBd.connecta.getCon();
        try {
            PreparedStatement stmt = con.prepareStatement("select * from servico");
            ResultSet rs = stmt.executeQuery();
            while(rs.next()){
                servicoPojo = new ServicoPOJO();               
                servicoPojo.setNome_servico(rs.getString("NOME_SERVICO"));

                servico.add(servicoPojo);
            }          
        }
            catch (SQLException ex) {
           JOptionPane.showMessageDialog(null, "Erro em consulta no banco"+ex.getMessage(),"SQLException", JOptionPane.ERROR_MESSAGE);          
            }
         SingletonBd.connecta.CloseCon();
         return servico;
}

Vou perder um tempinho para de dar uma dica.

Primeiro, tenha em mente que você vai trabalhar com um modelo, então vamos a classe modelo do JComboBox:

[code]import java.util.List;
import java.util.ArrayList;
import javax.swing.AbstractListModel;
import javax.swing.JComboBox;
import javax.swing.MutableComboBoxModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

public class ArrayListComboBoxModel extends AbstractListModel implements MutableComboBoxModel {

private ArrayList<ListDataListener> listeners = new ArrayList<ListDataListener>();
private Object selectedItem;
private List list;
int index;
JComboBox comboBox;

public ArrayListComboBoxModel(List list) {
    super();
    this.list = list == null ? new ArrayList() : new ArrayList(list);
}

public ArrayListComboBoxModel(List list, JComboBox comboBox) {
    super();
    this.list = list == null ? new ArrayList() : new ArrayList(list);
    this.comboBox = comboBox;
}

public void addElement(Object element) {
    list.add(element);
    fireChangeNotification();
}

@Override
public void addListDataListener(ListDataListener l) {
    synchronized (listeners) {
        listeners.add(l);
    }
}

public void fireChangeNotification() {
    synchronized (listeners) {
        ListDataEvent e = new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, 0, getSize());
        for (ListDataListener listener : listeners) {
            listener.contentsChanged(e);
        }
    }
}

@Override
public void removeListDataListener(ListDataListener l) {
    synchronized (listeners) {
        listeners.remove(l);
    }
}

// ListModel
public int getSize() {
    // Return the size of the ArrayList
    return list.size();
}

public ArrayList<Object> getAllItems() {
    return (ArrayList<Object>) this.list;
}

public Object getElementAt(int i) {
    // Return the element at the specified position
    return list.size() > 0 ? list.get(i) : null;
}

// ComboBoxModel
public Object getSelectedItem() {
    return selectedItem;
}

public int getItemIndex(Object item) {
    index = list.indexOf(item);
    return index;
}

public void setSelectedItemLista(Object item) {
    this.selectedItem = item;
    index = list.indexOf(item);
    if (comboBox != null) {
        comboBox.setSelectedIndex(index);
        comboBox.repaint();
    }
    this.fireChangeNotification();
}

public void setSelectedItem(Object item) {
    this.selectedItem = item;
    index = list.indexOf(item);
    this.fireChangeNotification();
}

public int getSelectedIndex() {
    //int index = list.indexOf(this.getSelectedItem());
    return index;
}

public void insertElementAt(Object element, int index) {
    // Insert the element at the specified position
    list.add(index, element);
    // Added in middle, notify ListDataListener objects
    fireChangeNotification();
}

public void removeElement(Object element) {
    // Find out position
    index = list.indexOf(element);
    if (index != -1) {
        // Remove an element
        list.remove(element);
    // Removed from middle, notify ListDataListener objects
    }
    fireChangeNotification();
}

public void removeElementAt(int index) {
    if (getSize() >= index) {
        // Remove an element at the specified position
        list.remove(index);
    // Removed from index, notify ListDataListener objects
    }
    fireChangeNotification();
}

public void setElementAt(int index, Object object) {
    list.set(index, object);
    fireChangeNotification();
}

public int getSelectedIndex(Object object) {
    index = list.indexOf(object);
    return index;
}

// Para esse metodo funcionar eh necessario que no Object esteja implementado
// os metodos: hashcode, equal e compareTo
public int getIndexOf(Object object) {
    int idx = -1;
    if (this.list != null) {
        idx = list.indexOf(object);
    }
    return idx;
}

}
[/code]

Segundo, você vai precisar de uma lista (pode ser o ArrayList) para adicionar ao modelo, então no deu DAO você precisa retornar uma lista de objetos (javabeans), esses javabeans precisa estar criados corretamente (com os métodos: toString, equals, hashcode e compareTo) para que você possa manipular seu JComboBox sem problemas, lembrando que você vai sempre mexer no modelo e nunca diretamente no JComboBox.

Supondo que fosse uma lista de clientes, então o objeto Cliente seria mais ou menos assim:

[code]import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;

/**
*

  • @author Francisco
    */
    public class Cliente implements Serializable, Comparable {

    public Cliente() {
    }
    private int codigo = 0;
    public static final String PROP_CODIGO = “codigo”;
    private String nome;
    public static final String PROP_NOME = “nome”;
    private String telefone;
    public static final String PROP_TELEFONE = “telefone”;

    public String getTelefone() {
    return telefone;
    }

    public void setTelefone(String telefone) {
    String oldTelefone = this.telefone;
    this.telefone = telefone;
    propertyChangeSupport.firePropertyChange(PROP_TELEFONE, oldTelefone, telefone);
    }

    public String getNome() {
    return nome;
    }

    public void setNome(String nome) {
    String oldNome = this.nome;
    this.nome = nome;
    propertyChangeSupport.firePropertyChange(PROP_NOME, oldNome, nome);
    }

    public int getCodigo() {
    return codigo;
    }

    public void setCodigo(int codigo) {
    int oldCodigo = this.codigo;
    this.codigo = codigo;
    propertyChangeSupport.firePropertyChange(PROP_CODIGO, oldCodigo, codigo);
    }
    private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);

    public void addPropertyChangeListener(PropertyChangeListener listener) {
    propertyChangeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
    propertyChangeSupport.removePropertyChangeListener(listener);
    }

    @Override
    public int hashCode() {
    return (int) (this.getCodigo() * 333);
    }

    @Override
    public boolean equals(Object obj) {
    if (obj == null) {
    return false;
    }
    if (getClass() != obj.getClass()) {
    return false;
    }
    final Cliente other = (Cliente) obj;
    if (this.getCodigo() != other.getCodigo()) {
    return false;
    }
    return true;
    }

    public int compareTo(Cliente o) {
    if (this.hashCode() < o.hashCode()) {
    return -1;
    } else if (this.hashCode() == o.hashCode()) {
    return 0;
    } else if (this.hashCode() > o.hashCode()) {
    return 1;
    } else {
    return 1;
    }
    }

    @Override
    public String toString() {
    return this.getNome();
    }
    }[/code]

Segue exemplo de uso:

[code]// Supondo que no seu DAO (ou de outro lugar) a lista venha montada assim
List listaClientes = new ArrayList();

Cliente item1 = new Cliente();
item1.setCodigo(1);
item1.setNome(“JOSÉ DA SILVA”);
item1.setTelefone(“11 3456-8765”);
listaClientes.add(item1);

Cliente item2 = new Cliente();
item2.setCodigo(2);
item2.setNome(“MARIA DA SILVA”);
item2.setTelefone(“11 3765-9432”);
listaClientes.add(item2);

// Agora você adiciona ao modelo do seu JComboBox
ArrayListComboBoxModel modeloComboBoxClientes = new ArrayListComboBoxModel(listaClientes);
comboClientes.setModel(modeloComboBoxClientes);

// Para que seu combo inicia mostrando a primeira posicao
comboClientes.getModel().setSelectedItem(comboClientes.getModel().getElementAt(0));

// Para que em determinado momento voce precise selecionar um determinado item na lista (numa consulta por exemplo)
Cliente itemConsultado = new Cliente(); // aqui no exemplo na tem nada no objeto
comboClientes.setSelectedItem(itemConsultado);

// Para pegar o objeto selecionado no momento
Cliente clienteSelecionado = (Cliente) comboClientes.getSelectedItem();

// Para remover todos os itens do JComboBox basta passar uma lista vazia
modeloComboBoxClientes = new ArrayListComboBoxModel(new ArrayList());
comboClientes.setModel(modeloComboBoxClientes);[/code]Espero que tenha entendido e que possa te ajudar, só lembrando que trabalhar como modelos é bem mais “elegante” (JComboBox, JTable, JList, etc…)

Cara ta meio estranho, meio complexo. Pq tipo assim, eu pensei em simplesmente usar um metodo no classe DAO q pega os dados do banco e depois la no JFrame eu passasse os dados pra esse ComboBox, nao pensei q tinha q usar modelo tudo mais. Lembrando q o ComboBox e arrasta e joga no Panel, eu vejo muitos q eles fazem manual.

Pessoal e o seguinte, tenho uma classe chamada FuncionarioDAO que tem um metodo chamado buscaFuncionario() que pega do banco. E tenho um formulario JFrame com um JComboBox chamado funcionarios que eu arrastei pro painel, e eu quero popular ele com os nomes que o metodo buscaFuncionario() pegou. o metodo e esse embaixo. Como eu faria pra la na classe JFrame pegar os dados que esse metodo esta pegando e preencher no JComboBox?

public ArrayList buscaFuncionario() {
         funcionario = new ArrayList();
         //funcionarioPojo = new funcionario();
         SingletonBd.connecta.conecta("bancoSalao");
         this.con = SingletonBd.connecta.getCon();
        try {
            PreparedStatement stmt = con.prepareStatement("select * from funcionario");
            ResultSet rs = stmt.executeQuery();
            while(rs.next()){
                funcionarioPojo = new FuncionarioPOJO();
                funcionarioPojo.setNome_funcionario(rs.getString("NOME_FUNCIONARIO"));                                            
                funcionario.add(funcionarioPojo);
            }
        }
            catch (SQLException ex) {
           JOptionPane.showMessageDialog(null, "Erro em consultar no banco"+ex.getMessage(),"SQLException", JOptionPane.ERROR_MESSAGE);
                
            }
         SingletonBd.connecta.CloseCon();
         return funcionario;
}

Tenho um formulario de clientes que possui isso
public void mostraUF() throws SQLException {
CidadeDAO dao = new CidadeDAO();
cidades = dao.getLista("%" + jTPesquisa.getText() + “%”);
for (Iterator iter = cidades.iterator(); iter.hasNext():wink: {
cb_uf.addItem(iter.next());
}
}

e tenho uam classe CidadeDAO com este método:

public List<Cidade> getLista(String nome) throws SQLException {
String sql = “select * from cidade where cid_nome like?”;
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, nome);

    ResultSet rs = stmt.executeQuery();
    List&lt;Cidade&gt; minhaLista = new ArrayList&lt;Cidade&gt;();
    while (rs.next()) {
        Cidade cid = new Cidade();
        cid.setCodigo(Long.valueOf(rs.getString("cid_codigo")));
        cid.setNome(rs.getString("cid_nome"));
        cid.setUf(rs.getString("cid_uf"));
        minhaLista.add(cid);
    }
    rs.close();
    stmt.close();
    return minhaLista;
}

estou tentando manipular minha combobox com os dados do banco de dados o que estou fazendo de errado?