Dúvidas com JCombobox

Galera,

A duvida referente ao JCombobox é a seguinte, eu carrego os dados de um ResultSet no combobox sem problemas, mas quando vou editar a janela, ou mesmo quando clico no botao de salvar os dados da janela onde esta o combobox como eu consigo saber o codigo do registro selecionado no combobox?

Exemplo de dados que foram carregados no combobox:
Joao (Código do registro no ResultSet = 1)
Joao (Código do registro no ResultSet = 2)
Joaquim (Código do registro no ResultSet = 3)
Ziraldo (Código do registro no ResultSet = 4)

Como podem ver, existem strings repetidas no combobox porem os codigos no banco de dados referem-se a registros diferentes, entao eu nao posso simplesmente verificar pelo conteudo do combobox para saber se trata-se do 1o. Joao ou do 2o. Joao, neste caso eu preciso saber o codigo relacionado com a tabela onde os Joao’s (1o. e 2o.) estao cadastrados, como posso saber o codigo deste registro selecionado no combobox?

OBrigado.

Galera,

Descobri como faz, vou tentar explicar com um exemplo pra ver se facilita a vida de muita gente, já que este é um tópico bastante procurado e todas as respostas obtidas anteriormente não ajudaram muito.

O que eu vou apresentar aqui foi a maneira que eu consegui fazer funcionar, pode ser que não seja a melhor… mas funciona… de qualquer forma o tópico está aberto para novas opiniões.

Vamos lá:

Primeiro eu criei uma classe chamada combo, note que existe um método “public String toString()”, isso é muito importante, é ele que retorna a string para preencher o combobox:


class combo {
    private String value;
    private int key;
    public combo(int key, String value) {
        this.key=key;
        this.value=value;
    }
    
    public String toString() {
        return value;
    }
    
    public int getKey() {
        return key;
    }

}

Muito bem, depois de criar a classe acima vamos trabalhar na interface, no meu JFrame eu criei a variável:

private ComboBoxModel model;

E no próprio constructor do meu JFrame eu criei um Vector onde serão adicionados os itens e utilizei a variável model para popular o combobox:

        ResultSet rs = stmt.executeQuery("SELECT codigo, nome FROM clientes ORDER BY nome");
        Vector v = new Vector();
        while (rs.next()) {
            combo cmb = new combo(rs.getInt("codigo"), rs.getString("nome"));
            v.add(cmb);
        }
        model = new DefaultComboBoxModel(v);
        jComboBox1.setModel(model); //Relaciona o modelo com o combobox, fazendo com que os itens do modelo sejam carregados no combobox

Bom, depois disso se você precisar saber qual o código do item selecionado pelo usuário no combobox basta utilizar:


//Recebe o item selecionado no combobox como um Object
Object obj = jComboBox1.getSelectedItem();

//Mostra o código selecionado no combobox em um label, tem que fazer um cast para o tipo do objeto recebido na variável obj (acima)
jLabel1.setText( String.valueOf(((combo) obj).getKey()) );

Bom, era isso, espero ter ajudado.

jMozerPJ,

Valeu pelo post. Resolveu o meu problema.

Este post é meio antigo, será que já tem algo melhorado no netbeans 7?

Abraços.

Olintho