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È.
Alguem tem uma ideia de como poderia fazer isso?
O nome disso é “autocomplete”. Um exemplo de JComboBox com autocomplete pode ser encontrado na biblioteca Glazed Lists.
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.
Tentei fazer um na mão mesmo, até que ficou bom, segue o código:
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package _componentes;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.text.JTextComponent;
/**
*
-
@author adm
*/
public class ComboBoxFiltro extends JComboBox {
ArrayList lista=new ArrayList<>();
public ComboBoxFiltro() {
setEditable(true);
getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
@Override public void keyReleased(KeyEvent e) {
if( KeyEvent.getKeyText(e.getKeyCode()).length()==1 ){
pesquisar();
}
}
});
}
private void pesquisar() {
String text = ((JTextComponent)getEditor().getEditorComponent()).getText();
super.removeAllItems();
for(Object o : lista){
if(o!=null && o.toString()!=null && o.toString().toLowerCase().contains(text.toLowerCase())){
super.addItem(o);
}
}
showPopup();
((JTextComponent)getEditor().getEditorComponent()).setText(text);
}
@Override
public void addItem(Object item) {
lista.add(item);
}
@Override
public void removeItem(Object anObject) {
lista.remove(anObject);
}
@Override
public void removeItemAt(int anIndex) {
lista.remove(anIndex);
}
@Override
public void removeAllItems() {
lista.clear();
}
}
[/code]