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:
publicArrayList<Object>CarregarPaises(){ArrayList<Object>array=newArrayList();Stringsql="SELECT * FROM paises";ResultSetresult=con.query(sql);try{while(result.next()){LocalidadesPaispaises=newLocalidadesPais();paises.setCodPais(result.getInt("cod_pais"));paises.setDescPais(result.getString("des_pais"));array.add(paises);}}catch(SQLExceptionex){Logger.getLogger(ConfiguracoesDAO.class.getName()).log(Level.SEVERE,null,ex);JOptionPane.showMessageDialog(null,"ERRO!\n\n"+ex.getMessage(),"Carregar País",JOptionPane.ERROR_MESSAGE);}returnarray;}
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.
Como faço essa implementação?
ViniGodoy
Chame o addItem sem chamar toString(). Deixe que a Combobox chame o addItem internamente.
Assim o getSelectedItem vai retornar o objeto da sua classe, com todos os atributos que ele tem.
X
xperito
Vini,
O problema é que não aparece a descrição do Pais…
Fica assi:
Achei um jeito + ou -…
publicHashMap<Integer,String>CarregarPaises(){HashMap<Integer,String>hash=newHashMap<>();Stringsql="SELECT * FROM i3_paises";ResultSetresult=con.query(sql);try{while(result.next()){hash.put(result.getInt("cod_pais"),result.getString("des_pais"));}}catch(SQLExceptionex){Logger.getLogger(ConfiguracoesDAO.class.getName()).log(Level.SEVERE,null,ex);JOptionPane.showMessageDialog(null,"ERRO!\n\n"+ex.getMessage(),"EstCar - Carregar País",JOptionPane.ERROR_MESSAGE);}returnhash;}
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?
ViniGodoy
Você sobrescreveu o método toString da classe LocalidadesPais, como indiquei no primeiro post?
publicList<LocalidadesPais>CarregarPaises(){List<LocalidadesPais>array=newArrayList<LocalidadesPais>();ResultSetresult=con.query("SELECT * FROM paises");try{while(result.next()){LocalidadesPaispais=newLocalidadesPais();pais.setCodPais(result.getInt("cod_pais"));pais.setDescPais(result.getString("des_pais"));array.add(pais);}}catch(SQLExceptionex){Logger.getLogger(ConfiguracoesDAO.class.getName()).log(Level.SEVERE,null,ex);JOptionPane.showMessageDialog(null,"ERRO!\n\n"+ex.getMessage(),"Carregar País",JOptionPane.ERROR_MESSAGE);}returnarray;}
X
xperito
NOSSAA! PERFEITO!
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.
publicList<LocalidadesPais>CarregarPaises(){List<LocalidadesPais>array=newArrayList<LocalidadesPais>();ResultSetresult=con.query("SELECT * FROM i3_paises");try{while(result.next()){LocalidadesPaispais=newLocalidadesPais();pais.setCodPais(result.getInt("cod_pais"));pais.setDescPais(result.getString("des_pais"));array.add(pais);}}catch(SQLExceptionex){Logger.getLogger(ConfiguracoesDAO.class.getName()).log(Level.SEVERE,null,ex);JOptionPane.showMessageDialog(null,"ERRO!\n\n"+ex.getMessage(),"Carregar País",JOptionPane.ERROR_MESSAGE);}returnarray;}