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 