Preenchendo JComboBox()

Como faço para preencher uma JComboBox com Código (como índice) e, Descrição (como text)?

O model do ComboBox deve ser preenchido com objetos em vez de strings. Por exemplo,

class CodigoDescricao {
    public int codigo;
    public String descricao;
    public CodigoDescricao (int codigo_, String descricao_) { codigo = codigo_; descricao = descricao_; }
    public String toString() { return descricao; }
}
...

jcombobox.add (new CodigoDescricao (10, "Farinha")); 
...

Beleza moleque!

Agora é são elas!

Vai apararecer na combo só a descrição, né!?

Quando for selecionar o item, preciso pegar o código pra fazer alguma coisa, por exemplo:
Gravar o dado em uma tabela, que por sua vez só precisa do código do cara.

É isso que esse cara vai fazer?

É isso mesmo. getSelectedItem vai lhe voltar um Object, mas no seu caso o Object é um CodigoDescricao. Portanto, dá para obter o código só fazendo um cast, ou a descrição também.

CodigoDescricao cd = (CodigoDescricao) jcombobox.getSelectedItem();
if (cd != null) {
    ... faça o que bem entender
}

Valeu moleque!

A Bhrama Extra é por minha conta!

KKKKKKKKKKKKKKKKKKKKKKKKKK

O código ficou assim para quem quizer algo Genérico, só falta arrumar um pouco mais.

Estou fazendo isso nesse momento.

    protected static JComboBox PreencheJComboBox(final JComboBox jC, final ResultSet rs) {
        //JComboBox cmb = new JComboBox(new Object[] [] {{11, "A"}, {22, "B"}, {33, "C"}});
        
        try {
            //Limpa Combox
            if (jC.getItemCount() > 0) {
                jC.removeAllItems();
            }
            
            while (rs.next()) {
                
                class CodigoDescricao {
                    public int codigo;
                    public String descricao;
                    public CodigoDescricao (int codigo_, String descricao_) { codigo = codigo_; descricao = descricao_; }
                    @Override
                    public String toString() { return descricao; }
                }

                CodigoDescricao obj = new CodigoDescricao ((Integer) rs.getObject(1), (String) rs.getObject(2));
                
                jC.addItem(obj.toString()); 
        
                //jC.addItem(rs.getObject(2));
                //jC.setSelectedIndex(rs.getInt(1));
            }

        } catch (SQLException ex) {
            Logger.getLogger(PreencheObjetos.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return jC;
    }

[color=red]Gostaria de dizer no assunto da mensagem [RESOLVIDO com muito suceeso!], mas não sei fazer isso.[/color]

O código ficou assim para quem quizer algo Genérico, só falta arrumar um pouco mais.

Estou fazendo isso nesse momento.

    protected static JComboBox PreencheJComboBox(final JComboBox jC, final ResultSet rs) {
                
        try {
            //Limpa Combox
            if (jC.getItemCount() > 0) {
                jC.removeAllItems();
            }
            
            while (rs.next()) {
                
                class CodigoDescricao {
                    public int codigo;
                    public String descricao;
                    public CodigoDescricao (int codigo_, String descricao_) { codigo = codigo_; descricao = descricao_; }
                    @Override
                    public String toString() { return descricao; }
                }

                CodigoDescricao obj = new CodigoDescricao ((Integer) rs.getObject(1), (String) rs.getObject(2));
                
                jC.addItem(obj.toString()); 
        
                //jC.addItem(rs.getObject(2));
                //jC.setSelectedIndex(rs.getInt(1));
            }

        } catch (SQLException ex) {
            Logger.getLogger(PreencheObjetos.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return jC;
    }

pois é…mas vc poderia fazer assim:

Vector opcoes =new Vector();
JComboBox combo =new JComboBox(opcoes);

depois disso vc mexeria somente nas opcoes…e tudo se refletiria no combobox…isso pq é mvc…e o opcoes é o model…e o combo é a view :wink:

espero ter ajudado…

Abel,

      Você está me dizendo que primeiro preencheria o Vector e, depois diaria a combo que deve trabalhar com os dados do mesmo?

      É isso que estou entendendo!?

sim…exatamento…e para facilitar mais pra vc…vc pode preencher uma collection no seu dao…e retornar para o Vector no contrutor, que vai funcionar tb…assim:

Vector lista = new Vector(dao.seuMeotodoQueRetornaCollection());

sacou :wink:

fica bem mais facil…assim qualquer alterarção a ser feita no combo , vc faz na lista…

Perfeito!

Taí!, gostei, acatarei essa implementação.

Valeu!