Eu tenho um ComboBox que carrega os dados de uma tabela quado abre o formulário.
Gostaria de saber se tem alguma forma de em vez da pessoa clicar no combo e escolher a opção, ela começa a escrever o opção no combo e ja vai aparecendo as opções possíveis, tipo na busca do Google.
Para fazer um recurso como o do Google, torna-se um pouco mais complexa a questão. Para fazer algo um pouco mais simples, você pode fazer o uso do AutoComplete das GlazedLists.
Suponhamos que estejamos trabalhando com uma lista de produtos:
No casa eu não quero que seja exatamente igual ao google pois eu os dados ja estão no Combo, não vou procurar no banco a cada letra que o usuario digitar.
O que eu preciso é que ele verifique no próprio combo mesmo.
Vou testar isso que vc me passou. Obrigado.
juliocesarss
Deixa eu ver se eu entendi.
//Toda essa parte você usou para jogar os dados numa List e depois no combo JComboBoxprodutosComboBox=newJComboBox();List<Produto>produtosEncontrados=ProdutoDAO.buscarProdutos();SortedList<Produto>produtos=SortedList.create(GlazedLists.eventList(produtosEncontrados));EventComboBoxModel<Produto>produtosComboBoxModel=newEventComboBoxModel<Produto>(produtos);produtosComboBox.setModel(produtosComboBoxModel);
//e esse é método pra completar?AutoCompleteSupport.install(produtosComboBox,produtos);
Nicolas_Fernandes
Vamos comentar:
//Crio uma JComboBox.JComboBoxprodutosComboBox=newJComboBox();//Requisito uma lista de produtos do meu modelo.List<Produto>produtosEncontrados=ProdutoDAO.buscarProdutos();/*CrioumaSortedList,queéparâmetroparacriaromodelodaJComboBox.EssaSortedListdeveterumaEventListcomoparâmetro.ParacriaressaEventListapartirdeumaListnormal,eufaçousodométodoestáticoeventListdaclasseGlazedLists,ecriominhaSortedList.*/SortedList<Produto>produtos=SortedList.create(GlazedLists.eventList(produtosEncontrados));// Crio o Model baseado na minha SortedList acima.EventComboBoxModel<Produto>produtosComboBoxModel=newEventComboBoxModel<Produto>(produtos);// Seto minha JComboBox com o modelo criado acima.produtosComboBox.setModel(produtosComboBoxModel);// Ativa o recurso de AutoCompletar: os parâmetros significam "onde será feito o autocomplete" e "sobre quais dados serão feitos os controles".AutoCompleteSupport.install(produtosComboBox,produtos);
Basicamente isso!
E agora, ficou claro?
juliocesarss
Eu entendi como funciona.
Só não estou conseguindo adptar no meu projeto.
Eu preciso fazer desta forma, com List?
da uma olhado em como eu faço e me corrija se eu estiver errado.
//método Profissional é o que pesquisa no banco os dados que vão pro combo//cbxOco é o meu comboVectorocorrencia=Proc.Profissional();cbxOco.removeAllItems();cbxOco.addItem(" ");for(inti=0;i<ocorrencia.size();i++){cbxOco.addItem(ocorrencia.elementAt(i));}
Então eu ja tenho o combo e os dados nele.
Como eu posso aplicar o que você me passou nisso, ou eu teria que mudar o que eu fiz?
Obrigado
Nicolas_Fernandes
juliocesarss:
Eu entendi como funciona.
Só não estou conseguindo adptar no meu projeto.
Eu preciso fazer desta forma, com List?
da uma olhado em como eu faço e me corrija se eu estiver errado.
//método Profissional é o que pesquisa no banco os dados que vão pro combo//cbxOco é o meu comboVectorocorrencia=Proc.Profissional();cbxOco.removeAllItems();cbxOco.addItem(" ");for(inti=0;i<ocorrencia.size();i++){cbxOco.addItem(ocorrencia.elementAt(i));}
Então eu ja tenho o combo e os dados nele.
Como eu posso aplicar o que você me passou nisso, ou eu teria que mudar o que eu fiz?
Obrigado
Júlio,
Porque você faz uso do Vector? Se procurar no GUJ, o Vini tem argumentos plausíveis para não usar mais Vector (não me lembro ao certo quais, mas foi por eles que não usei mais rs). Porque não faz uso de Lists? Com o uso de Lists, seu código ficaria muito mais legível e mais rápido:
Ah legal cara… entendi como funciona… realmente melhor.
Porém… ele esta dando um problema.
A Lsit “ocorrencias” recebe os dados que eu quero belezinha, porém quando “ocorrenciasComboBoxModel” recebe “ocorrencias” ele não funciona… fica nulo… dai quando seta no meu Combo cbxOco ele não recebe os dados.
Deu pra entender o que eu quis dizer? :lol:
Teoricamente o código está certo mas por algum motivo ele não funciona quando chega no ComboBoxModel.
Tentei fazer algumas alterações mas não deu muito certo
Nicolas_Fernandes
juliocesarss:
Ah legal cara… entendi como funciona… realmente melhor.
Porém… ele esta dando um problema.
A Lsit “ocorrencias” recebe os dados que eu quero belezinha, porém quando “ocorrenciasComboBoxModel” recebe “ocorrencias” ele não funciona… fica nulo… dai quando seta no meu Combo cbxOco ele não recebe os dados.
Deu pra entender o que eu quis dizer? :lol:
Teoricamente o código está certo mas por algum motivo ele não funciona quando chega no ComboBoxModel.
Tentei fazer algumas alterações mas não deu muito certo
Posta o código que você fez que tá dando nulo?
juliocesarss
É o código que vc me passo.
Eu depurei o código para ver onde estava o erro, e o que acontece é que o "ocorrencia" recebe os valores, "ocorrencias" também, perfeitamente, porém quando vai passar para o ComboBoxModel ele recebe null, não sei pq :?