Quando eu trabalhava com VB existia uma propriedade chamada item data na combo, onde eu poderia adicionar os ids dos itens listados na combo.
O itemData não era visivel aos usuarios, listando na combo somente a descrição dos registros das tabelas… mas eu tinha acesso aos ids para consulta, salvamento, etc, quando selecionado um item…
Gostaria de saber se no JComboBox existe algum recurso semelhante…
Não sei se fui claro na explicação, mas de qualquer forma agradeço a ajuda.
Em um JComboBox você pode adicionar objetos em vez de strings, mas o que é mostrado é o resultado do método public String toString(), e para localizar um item em um combo é necessário redefinir o método public boolean equals(). Exemplo para um combo de estados:
class Estado {
private String nome, sigla;
public Estado (String nome, String sigla) { this.nome = nome; this.sigla= sigla; }
public String toString() { return sigla; } // isto é o que será mostrado no combo
// se quiser achar o estado no combo pela sigla
public boolean equals(Object obj) { return obj == this || obj instanceof Estado && ((Estado)obj).sigla.equals(this.sigla); }
}
Se você não puder redefinir o método toString, você pode fazer o seguinte:
Crio uma classe que contém o objeto em si, e sua representação string;
Adiciono instäncias dessa classe (no exemplo abaixo, CidadeItemCombo) ao JComboBox. Exemplo:
class Cidade {
private int codigo;
private String nome;
... getters & setters ...
}
class CidadeItemCombo {
private Cidade cidade;
// digamos que você queira mostrar "02345: São José da Barra" no combo...
public String toString() { return String.format ("%05", codigo) + ": " + nome; }
}
Mas agora me veio outra dúvida…
Tem como eu adicionar em uma JComboBox um ArrayList ou algo do tipo?
Por exemplo:
Tenho um método que retorna um List dos objetos que desejo adicionar na combo:
List lista = new ArrayList();
try {
strSql = ("SELECT id, descricao FROM tbldepartamentos ORDER BY descricao");
st = conn.prepareStatement(strSql);
rs = st.executeQuery();
while (rs.next()){
Departamentos d = new Departamentos(
new Integer(rs.getInt("id")),
rs.getString("descricao"));
lista.addItem(d);
}
...
return lista;
Existe alguma forma de eu adicionar essa list completa no JComboBox? pra não fazer um novo loop…