[RESOLVIDO] Problemas com índice de um JComboBox

Olá pessoal, ja faz um tempo que eu estou procurando um modo de implementar isso, o problema é o seguinte: tenho um JComboBox, com nomes de funcionários que busquei dentro do bd, e o que eu quero fazer é pegar o índice do item selecionado dentro do JComboBox, o problema é que dentro do bd podem ter varias pessoas com o mesmo nome então o .getSelectedIndex() não funciona pois ele retorna o valor do primeiro encontrado e não o qual o usuário escolheu, ou então atribuir um valor a cada posição do JComboBox. Em VB seria algo como:

cbx_nomeFuncionario.DataSource = ds.Tables("funcionarios") cbx_nomeFuncionario.DisplayMember = "nome" cbx_nomeFuncionario.ValueMember = "id"

eu tenho duas tabelas com os seguintes campos:
usuario: codUsuario, codFuncionario, …
funcionario: codFuncionario, nome, …

como disse a cima, o que gostaria de fazer é atribuir um valor a posição do JComboBox, se existir um método de atribuir um valor (codFuncionario) para cada posição do seu respectivo nome, para que eu possa gravar a o valor da posição (codFuncionario) dentro da tabela usuario, e obviamente como atribuir esse valor de índece a uma variavel, agradeceria se alguem me ajudasse na implementação desse código, muito obrigado.

Olá amigo

private void inicializaCombobox() throws Exception {
    try {

       stmt = dbConnection.createStatement();
       // preenche a lista de Setores

       rs = stmt.executeQuery("select setor from setores order by setor");
       cboSetor.addItem("Selecione um item");
       while(rs.next()){
           cboSetor.addItem(rs.getObject(1));
       }
       cboSetor.addItemListener(new ItemListener() {
       public void itemStateChanged(ItemEvent e) {
          if (e.getStateChange() == ItemEvent.SELECTED) {
              mostraSetor();
 	}
       } });
    } catch (Exception ex) {
             Logger.getLogger(FramePatrimonio.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private void mostraSetor() {
    tfSetor.setText(cboSetor.getSelectedItem().toString());
}

acho que isso pode lhe ajudar.

Silvio Guedes

Olá Silvio,

adicionar campos ao JComboBox não é problema… o que acontece é que cada nome adicionado no combobox tem seu próprio codFornecedor, eu poderia usar o .getSelectedIndex() e usar o número retornado como o numero do codFornecedor, afinal de contas todos os registros de nome de funcionários estão dentro da combo, o problema é que se existir dois funcionários com o mesmo nome, e o usuário escolher o segundo funcionário o .getSelectedIndex() busca o índice do primeiro… e eu precisisaria do segundo pra uma possível atualização ou cadastro no bd, o que eu queria saber é como resolver esse problema de mostrar um valor mas utilizar outro, no caso o codigo correspondente ao nome entende?

mas mesmo assim muito obrigado pela atenção e ajuda.

olá amigo

vocẽ pode colocar no seu jcombobox os campos id,nome e quando for fazer a consulta pode usar os campos id para selecionar o registro que deseja.

http://www.guj.com.br/posts/list/7799.java

Silvio Guedes

Olá Gabriel, acredito que a forma mais fácil seja popular seu JComboBox com Models tendo o método “toString()” sobrescrito. Por exemplo:

Model:

public class Funcionario{

       private String nome;
       private long codigo;

       public String getNome(){
              return nome;
       }
       public void setNome(String nome){ 
              this.nome = nome;
       }
       public long getCodigo(){
              return codigo;
       }
       public void setCodigo(long codigo){
              this.codigo = codigo;
       }

       @Override
       public String toString(){
              return nome;
       }
}

Preencha o Model com os dados provenientes do BD (caso não utilize algum framework que o faça) e adicione-o no JComboBox como um item qualquer, exemplo:

Funcionario  model = new Funcionario();
JComboBox combo = new JComboBox();
model.setNome("Gabriel");
model.setCodigo(3);
combo.addItem(model);

Depois, para buscar qualquer informação do elemento selecionado, basta buscar no model que fora colocado no JComboBox, exemplo:

[code]
((Funcionario)combo.getSelectedItem()).getCodigo();
((Funcionario)combo.getSelectedItem()).getNome();

etc…[/code]
Obs: não testei nada deste código, é só como exemplo mesmo.
Espero ter ajudado :slight_smile:

pois é romulobritta, tentei adequar seu código ao meu projeto mas infelizmente não consegui, pelo que vi, sua lógica é semelhante ao do meu primeiro post, mostrar um conteudo no combobox, mas trabalhar com outro, semelhante o código que usei em VisualBasic, mas encontrei uma solução para o meu problema aqui no fórum mesmo, JURO que procurei, mas no fim das contas um parceiro de projeto acabou achando aqui dentro, segue o link da resolução:

http://www.guj.com.br/posts/list/185749.java
resposta dada pelo jmozerPJ

agradeço a todos que postaram dando dicas de como resolver, muito obrigado. :smiley: