6 de mar. de 2016

Completar automaticamente ComboBox

Baseado nessa postagem do GUJ, eu criei um simples exemplo de auto complete em ComboBox. O que ele basicamente faz é:


  • Quando o usuário digita com o ComboBox selecionado, ele trabalha com uma String temporária que armazena o texto;
  • A cada tecla digitada, o conteúdo do combobox é mostrado e atualizado;
  • Se backspace é digitado, atualizamos o filtro;
  • A cada tecla digitada, mostramos os itens do combo box, quando o combo box é oculto, o filtro é limpo e a tooltip ocultada.

O resultado é mais ou menos o seguinte:



O código da classe e mais uma aplicação de exemplo está abaixo. Coloquei também no github, me mande PR para melhorar e há MUITAS melhorias a serem feitas, como suporte a espaço e acentos.



5 comentários:

  1. Legal, código limpo e funcional, adicionei uma função ao final chamada de unAccent:
    public static String unAccent(String s) {
    String temp = Normalizer.normalize(s, Normalizer.Form.NFD);
    Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
    return pattern.matcher(temp).replaceAll("");
    }

    Dessa forma, caso digite pérsia, o filtro ainda ficará como "persia", mas irá buscar após adicionar o unAccent na stream do filtro:
    itens.filter(el -> unAccent(el.toString()).toLowerCase().contains(txtUsr)).forEach(filteredList::add);

    ResponderExcluir
  2. Oi, adorei seu blog! visita o meu?
    http://cantinhodearely.blogspot.com.br/

    ResponderExcluir
  3. Cara, o que significa :: como na linha 34 da classe ComboBoxAutoComplete? Eu pesquisei mas nao achei nada, só com : usando no for each.
    Eu posso instanciar essa classe(ComboBoxAutoComplete) assim ComboBoxAutoComplete'<'Integer'>' cmc = new ComboBoxAutoComplete<>();, usando interiros, por exemplo? Se não pq criou ela de forma genérica?

    ResponderExcluir
  4. show de bola, ótimo post, fiz isso com umas lista de objetos (Usuarios)

    ResponderExcluir
  5. como faço para colocar a pesquisa encima do meu combobox

    ResponderExcluir