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
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
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!