Atualizar um comboBox a partir de outro comboBox

7 respostas
M

Bom dia Pessoal,

Estou com uma dúvida em relação a comboBox’s de swing.
Um exemplo bem básico é atualizar Municipios, a partir de Estados.

Minha solução foi gerada a partir de um Action(ActionListener) no comboBox de estado.
Onde quando selecionado o UF(Estado), realiza uma busca em um Banco de Dados contendo Municipios com Chave Composta de ID_UF.
Retornando esses municipios em um arrayList, temos então os objetos para a ComboBox.

Minha solução então foi adicionar esse Array em um Model(DefaultComboBoxModel), e remover e adicionar os elementos a cada Select UF.

ActionListener comboBoxSelect = new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					comboSelected = (String) cBUf.getSelectedItem();
					listaMunicipio = DAO.getSingleton().obterListaMunicipio(comboSelected).toArray();//Transforma o ArrayList em Object
					model = new DefaultComboBoxModel(listaMunicipio);//Cria um novo model de listaMunicipio
					model.removeAllElements(); //Remove todos elementos
					for(Object obj: listaMunicipio){ //Para cada Objeto add
						model.addElement(obj);						
					}
					getComboBoxMunicipio().setModel(model); //Set o modelo na comboBox 
					//getComboBoxMunicipio().updateUI(); Não foi necessário
			}};			
			comboBoxUF.addActionListener(comboBoxSelect);

Essa foi uma das soluções que achei. Gostaria de saber se mais alguem tem uma solução eficiente para esse tipo de Swing.

Obrigado

7 Respostas

S

Ola!
Se eu entendi certo você quer, ao selecionar um valor de um combo ele atualiza o outro?certo? se for uma atualização pode ser q isso ajude:
Acho que você poderia colocar o outro em setvisible(false) e ao carregar o dados no primeiro como é uma lista vc faria criaa o atribuot “UF”, ficando assim:

private UF uf;

uf=llistaMunicipio.get(comboBox.getselectedIntem() -int);
assim você seleciona uma UF apos isso você

carrega a outro lista no combo que você quer atualizar outroCombo.addItem(valorcombo) e
da um setvisible(true).

Bom eu entendi isso espero que ajude,mas se entendi erra me desculpa peço que por favor explique-me melhor.

Vlew.

M

Sim, voce entendeu bem amigo.

Quero selecionar a UF, e listar somente as Cidades da UF selecionada.

Essa consulta é feita por SQL em uma outra classe.

Assim quando seleciono a combo, gero uma consulta no banco que me retornar as Cidades.
Esse addItem, ficaria um processo manual de adionar item por item, fazendo que seja um Loop.

Mais a solução está correta, gostaria de saber se há alguma outra, para atualização quando consutar o comboBox UF, atualizar automaticamente o Combo Municipios.

Obrigado pela resposta.
;D

S

Legal
Então acho que você poder fazer assim quando você pegar a uf que você quer ,fazendo com que na hora que vocẽ selecionar com o actionListener você pode criar um metodo passando esse valor do combo que vc selecionou e criar uma query devolvendo a lista de municipios daquela uf ,e dentro disso addItem();

M

Sim Sergio.

Essa foi a ação que tomei.
Ao clicar no comboBox e selecionar a UF, eu adiciono um novo Modelo de ComboBox para Municipios.
Assim eu sempre tenho a lista de municipios referente a UF selecionada.

S

Então você ja resolveu?
então fecho…

M

Sim, na verdade eu postei a solução, depois de buscar em vários forums e nunca achar uma solucação clara para esse tipo de problemas.
Gostaria mais de discutir a solução.

S

A legal uma otima ideia …aii vou fazer algo assim tentando uma solução ai agente discute isso.

vlew

Criado 10 de junho de 2011
Ultima resposta 10 de jun. de 2011
Respostas 7
Participantes 2