- 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.
Legal, código limpo e funcional, adicionei uma função ao final chamada de unAccent:
ResponderExcluirpublic 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);
Oi, adorei seu blog! visita o meu?
ResponderExcluirhttp://cantinhodearely.blogspot.com.br/
Cara, o que significa :: como na linha 34 da classe ComboBoxAutoComplete? Eu pesquisei mas nao achei nada, só com : usando no for each.
ResponderExcluirEu 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?
show de bola, ótimo post, fiz isso com umas lista de objetos (Usuarios)
ResponderExcluircomo faço para colocar a pesquisa encima do meu combobox
ResponderExcluir