Tenho um ArrayList em que o objeto possui 2 propriedades, que é código e descrição.
Queria passar a descrição para a combobox, mas que pudesse acessar a propriedade código para poder saber qual o elemento selecionado e gravar no banco de dados.
Como fazer isso, teria que implementar uma ComboBoxModel?
Alguém tem um exemplo?
Existe outra forma, mais “fácil”?
Método que retorna o Array:
public ArrayList<Object> CarregarPaises() {
ArrayList<Object> array = new ArrayList();
String sql = "SELECT * FROM paises";
ResultSet result = con.query(sql);
try {
while (result.next()) {
LocalidadesPais paises = new LocalidadesPais();
paises.setCodPais(result.getInt("cod_pais"));
paises.setDescPais(result.getString("des_pais"));
array.add(paises);
}
} catch (SQLException ex) {
Logger.getLogger(ConfiguracoesDAO.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, "ERRO!\n\n" + ex.getMessage(), "Carregar País", JOptionPane.ERROR_MESSAGE);
}
return array;
}
Se fizer assim não dá, porque o objeto tem duas propriedades: descrição e código.
Ele esta listando, mas preciso listar apenas a descrição. Ele esta listando o objeto em string.
Também não consigo acessar as propriedades do objeto a partir do array.
O println retornou a sequencia do banco.
Poderia agora pegar o index selecionado do combo box e buscar a key do banco pelo HashMap.
Depois gravo…
Que acha?
Cara sofri pacas para conseguir fazer isso com hash, havia dado certo. Mas do seu jeito muito melhor, nossa. Reduzi consideravelmente o código, e ficou muito mais legível.
Tinha visto em outros sites sobre como sobrescrever o método toString, mas não havia entendido muito bem, do jeito que falou ficou nítido e entendi, o que é o mais importante.
Ficou assim:
Classe LocalidadesPais
@Override
public String toString() {
return getDescPais();
}
Classe LocalidadesDAO
public List<LocalidadesPais> CarregarPaises() {
List<LocalidadesPais> array = new ArrayList<LocalidadesPais>();
ResultSet result = con.query("SELECT * FROM i3_paises");
try {
while (result.next()) {
LocalidadesPais pais = new LocalidadesPais();
pais.setCodPais(result.getInt("cod_pais"));
pais.setDescPais(result.getString("des_pais"));
array.add(pais);
}
} catch (SQLException ex) {
Logger.getLogger(ConfiguracoesDAO.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, "ERRO!\n\n" + ex.getMessage(), "Carregar País", JOptionPane.ERROR_MESSAGE);
}
return array;
}
Classe Localidades
public List<LocalidadesPais> CarregarPaises(){
return localDAO.CarregarPaises();
}
Classe FrmCadLocaldiades
public class FrmCadLocalidades extends javax.swing.JDialog {
...
private void tabLocalidadesStateChanged(javax.swing.event.ChangeEvent evt) {
JTabbedPane tp = (JTabbedPane) evt.getSource();
int index = tp.getSelectedIndex();
switch (index) {
case 1:
LoadEstados();
break;
case 2:
//LoadCidades();
break;
default:
break;
}
}
...
private void LoadEstados(){
comboboxEstadosPais.removeAllItems(); //Editei o post porque corrigi aqui, toda vez que acessava a aba de estados ele fazia novos addItem, duplicando os paises.
for (LocalidadesPais p : local.CarregarPaises()) {
comboboxEstadosPais.addItem(p.toString());
}
}