Bom dia, tenho a seguinte idéia:
Em uma tela de nota fiscal, iserir um JCombbBox que seria o campo para escolha do cliente, então eu faria uma pré pesquisa no banco e jogaria todos os clientes dentro do combobox.
Vamos supor que eu tivesse os seguintes clientes cadastrados:
MARIO
JOSÉ
CLEVELINO
Eu gostaria de, ao digitar, por exemplo, JOS no combobox(com o editor dele editavel) ele abrisse o painel suspenso e mostrasse apenas os clientes que contivessem o JOS no nome, no caso mostrando apenas o JOSÈ.
O nome disso é “autocomplete”. Um exemplo de JComboBox com autocomplete pode ser encontrado na biblioteca Glazed Lists.
mateusviccari
não é bem auto complete, pois o auto complete vai manter todos os itens no combobox, só vai selecionar aquele que iniciar com o que o usuario digitou.
Eu gostaria de fazer uma filtragem, removendo os itens do combo que não possuem no seu toString() o texto que o usuario digitou.
mateusviccari
Tentei fazer um na mão mesmo, até que ficou bom, segue o código:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package_componentes;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.util.ArrayList;importjavax.swing.ComboBoxModel;importjavax.swing.JComboBox;importjavax.swing.text.JTextComponent;/** * * @author adm */publicclassComboBoxFiltroextendsJComboBox{ArrayList<Object>lista=newArrayList<>();publicComboBoxFiltro(){setEditable(true);getEditor().getEditorComponent().addKeyListener(newKeyAdapter(){@OverridepublicvoidkeyReleased(KeyEvente){if(KeyEvent.getKeyText(e.getKeyCode()).length()==1){pesquisar();}}});}privatevoidpesquisar(){Stringtext=((JTextComponent)getEditor().getEditorComponent()).getText();super.removeAllItems();for(Objecto:lista){if(o!=null&&o.toString()!=null&&o.toString().toLowerCase().contains(text.toLowerCase())){super.addItem(o);}}showPopup();((JTextComponent)getEditor().getEditorComponent()).setText(text);}@OverridepublicvoidaddItem(Objectitem){lista.add(item);}@OverridepublicvoidremoveItem(ObjectanObject){lista.remove(anObject);}@OverridepublicvoidremoveItemAt(intanIndex){lista.remove(anIndex);}@OverridepublicvoidremoveAllItems(){lista.clear();}}