Dicas para se popular um JComboBox com informações do banco

Aew galera estou precisando de umas dicas para se popular um JComboBox com dados vindos do banco de dados com tabelas relacionadas…

por exemplo tenho um funcionario que é ligado a uma empresa…para mim selecionar a empresa tenho um combo onde seleciono a empresa mas para mim popular esse combo e setar o id da empresa qdo for salvar o cadastro de funcionario fica muito confuso por exemplo…

[code]
/**** FUNCOES PARA POPULAR COMBO EMPRESA ****/
public void obterRegistroEmpresa() {
//retorna uma matriz de empresa
linhaEmpresa = empresa.consultarEmpresa();
//atribui o numero de registros na tabela empresa para o vetor
listaEmpresaID = new String[empresa.numEmpresa() + 1];
listaEmpresa = new String[empresa.numEmpresa() + 1];
int i = 1;
listaEmpresaID[0] = “0”;
listaEmpresa[0] = “Selecione”;
while (i <= (linhaEmpresa.size())) {
//monta os vetores atribuindo os valores
colunaEmpresa = (Object[]) linhaEmpresa.get(i - 1);
listaEmpresaID[i] = colunaEmpresa[0].toString();
listaEmpresa[i] = colunaEmpresa[2].toString();
i++;
}
//Modela os vetores ComboBox com vetor passado
cbEmpresa.setModel(new javax.swing.DefaultComboBoxModel(listaEmpresa));
}

public void PopularComboEmpresa(String valor) {
    int i = 1;
    while (i <= linhaEmpresa.size()) {
        if (listaEmpresaID[i].equals(valor)) {
            cbEmpresa.setSelectedIndex(i);
        }
        i++;
    }
}[/code]

e para salvar eu verifico os indices e gravo o id correspondente no banco…

qual é a maneira mais inteligente de se fazer em java???

Obrigado.

Jovem,

Eu faço da seguinte forma, preencho o combo empresa no seguinte formato: “nome_empresa” + concateno uns 30 espaços em branco e depois disso coloco o id da empresa formatado com 5 caracteres…ficaria assim

Robinson Company                              00001
Robinson Developers                           00002

Ai no evento da combo apenas dou uma “espécie de rigth” no valor selecionado, pegando o id. Com esse id em mãos, passo ele para a rotina que carregará a combo funcionário

Usa o clássico…cria um Model com dois atributos id e Description, reescrreve o metodo toString informando que este cara vai retornar a variabel Description, depois é so ir dando add no jCombobox e que ele ja vai ficar com o id do cara que vc adicionou e o texto que vai aparecer é exatamente oeuq vc quer…na hora de recuperar este cara…

[quote=robinsonbsilva]Jovem,

Eu faço da seguinte forma, preencho o combo empresa no seguinte formato: “nome_empresa” + concateno uns 30 espaços em branco e depois disso coloco o id da empresa formatado com 5 caracteres…ficaria assim

Robinson Company                              00001
Robinson Developers                           00002

Ai no evento da combo apenas dou uma “espécie de rigth” no valor selecionado, pegando o id. Com esse id em mãos, passo ele para a rotina que carregará a combo funcionário[/quote]

warning: gambiarra detected

alguem teria algum exemplo em código de um modelo de JCombox da maneira que eu preciso estou tentando implementar mas nao intendi muito bem onde entra na historia o toString eu tentei reescrever o DefaultComboBoxModel mas nao consegui

Malz pelo post duplo minha net nao carregava a pagina…

sobre os exemplos em codigo encontrei um pesquisando por aqui e deu certo…vou mandar pra se alguem quiser usar

import java.util.ArrayList;   
import java.util.List;   
  
public class Fornecedor {   
  
   private Integer id;   
   private String  nome;   
      
   public Integer getId() {   
      return id;   
   }   
      
   public void setId(Integer id) {   
      this.id = id;   
   }   
      
   public String getNome() {   
      return nome;   
   }   
      
   public void setNome(String nome) {   
      this.nome = nome;   
   }   
      
   /**  
    * Simula a recuperação dos fornecedores do banco de dados  
    * @return uma lista com os fornecedores  
    */  
   public static List getAll() {   
      ArrayList list = new ArrayList();   
         
      Fornecedor fornecedor = new Fornecedor();   
      fornecedor.setId(new Integer(1));   
      fornecedor.setNome("Fornecedor 1");   
      list.add(fornecedor);   
         
      fornecedor = new Fornecedor();   
      fornecedor.setId(new Integer(2));   
      fornecedor.setNome("Fornecedor 2");   
      list.add(fornecedor);   
         
      fornecedor = new Fornecedor();   
      fornecedor.setId(new Integer(3));   
      fornecedor.setNome("Fornecedor 3");   
      list.add(fornecedor);   
         
      return list;   
   }   
  
   /**  
    * Faz com que o nome seja mostrado no combo  
    */  
   public String toString() {   
      return this.getNome();   
   }   
}  

[code]
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class MyFrame extends JFrame {

JComboBox combo = null;
JButton button = null;

public MyFrame() {
List listaFornecedores = Fornecedor.getAll();

  Vector fornecedores = new Vector();   
     
  fornecedores.addAll(listaFornecedores);   
     
  combo = new JComboBox(fornecedores);   
  button = new JButton("Ok");   
     
     
  button.addActionListener(new ActionListener() {   
     
     public void actionPerformed(ActionEvent e) {   
        Fornecedor fornecedor = (Fornecedor) combo.getSelectedItem();   
        JOptionPane.showMessageDialog(null, fornecedor.getId());   
     
     }   
  });   
     
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  this.setSize(300, 70);   
            this.setLocationRelativeTo(null);   
  this.setLayout(new GridLayout(1,1));   
  this.getContentPane().add(combo);   
  this.getContentPane().add(button);   

}

public static void main(String[] args) {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
} [/code]

vlw pela infrmaçao galera dessa maneira fica bem mais facil pra mim popular meu JComboBoX :smiley: