Dúvida ComboBox

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.

Olá, júlio!
Tudo bem?

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:

JComboBox produtosComboBox = new JComboBox();
List<Produto> produtosEncontrados = ProdutoDAO.buscarProdutos();
SortedList<Produto> produtos = SortedList.create(GlazedLists.eventList(produtosEncontrados));
EventComboBoxModel<Produto> produtosComboBoxModel = new EventComboBoxModel<Produto>(produtos);

produtosComboBox.setModel(produtosComboBoxModel);
AutoCompleteSupport.install(produtosComboBox, produtos);

E voilà, seu AutoComplete tá pronto!
Para usar esses recursos, faça o download do JAR das Glazed Lists: http://publicobject.com/glazedlists/

Espero que tenha ajudado!
Valeu, abraço!

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.

Deixa eu ver se eu entendi.

[code]
//Toda essa parte você usou para jogar os dados numa List e depois no combo
JComboBox produtosComboBox = new JComboBox();
List produtosEncontrados = ProdutoDAO.buscarProdutos();
SortedList produtos = SortedList.create(GlazedLists.eventList(produtosEncontrados));
EventComboBoxModel produtosComboBoxModel = new EventComboBoxModel(produtos);

    produtosComboBox.setModel(produtosComboBoxModel);[/code]
//e esse é método pra completar?
AutoCompleteSupport.install(produtosComboBox, produtos);

Vamos comentar:

//Crio uma JComboBox.
JComboBox produtosComboBox = new JComboBox();

//Requisito uma lista de produtos do meu modelo.
List<Produto> produtosEncontrados = ProdutoDAO.buscarProdutos();

/* Crio uma SortedList, que é parâmetro para criar o modelo da JComboBox.
    Essa SortedList deve ter uma EventList como parâmetro. Para criar essa EventList a partir de uma List normal, eu faço uso do método estático eventList da classe GlazedLists, e crio minha SortedList. */
SortedList<Produto> produtos = SortedList.create(GlazedLists.eventList(produtosEncontrados));

// Crio o Model baseado na minha SortedList acima.
EventComboBoxModel<Produto> produtosComboBoxModel = new EventComboBoxModel<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?

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 combo
Vector ocorrencia = Proc.Profissional();
        cbxOco.removeAllItems();
        cbxOco.addItem(" ");
        for (int i = 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

[quote=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 combo
Vector ocorrencia = Proc.Profissional();
        cbxOco.removeAllItems();
        cbxOco.addItem(" ");
        for (int i = 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[/quote]

Júlio,

  1. 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:
cbxOco = new JComboBox();
cbxOco.removeAllItems();

List<String> ocorrencia = Proc.Profissional();
ocorrencia.add(0, "");
SortedList<String> ocorrencias = SortedList.create(GlazedLists.eventList(ocorrencia));
EventComboBoxModel<String> ocorrenciasComboBoxModel = new EventComboBoxModel(ocorrencias);
cbxOco.setModel(ocorrenciasComboBoxModel);
AutoCompleteSupport.install(cbxOco, ocorrencias);

“Profissionalmente” ficaria mais ou menos assim!

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

[quote=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[/quote]

Posta o código que você fez que tá dando nulo?

É 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 :?

[code]
cbxOco = new JComboBox();
cbxOco.removeAllItems();

    List<String> ocorrencia = Proc.Profissional();
    ocorrencia.add(0, "");
    SortedList<String> ocorrencias = SortedList.create(GlazedLists.eventList(ocorrencia));
    EventComboBoxModel<String> ocorrenciasComboBoxModel;
    ocorrenciasComboBoxModel = new EventComboBoxModel(ocorrencias);
    cbxOco.setModel(ocorrenciasComboBoxModel);
    AutoCompleteSupport.install(cbxOco, ocorrencias)[/code]