Salve Rapaziada,
Estou com o seguinte problema:
criei um jTable que é populado por uma List, seria uma lista de históricos padrões para lançamento de caixa, então criei um jTextField, para filtrar esses históricos.
Então, a cada letra digitada eu queria que fosse refinando a pesquisa tipo o google.
fiz um código aqui com um um keyPressed, que chama esse método a cara letra digitada, mas acho que está muito “gambiarra”, e está com muitos problemas, um é que primeiro ele chama o evento pra depois digitar a palavra no textField, ou seja, se eu digitar C, ele não busca nada pois o JtextField está vazio, dai digito CA, ele busca a palavra C, digito CAS, ele busca CA, e assim por diante.
e o mais crítico é que na 3º letrar digitada ele dá um StringIndexOutOfBoundsException,
pois tive que comparar duas Strings e pelo que etendo o equals compara a palavra completa, então tive que pegar um substring(), com a mesma quantidade de caracteres da palavra digitada, ou seja, se eu digitar CAS, ele pega as 3 primeiras palavras de cada histórico e compara, mas é ai que dá um estouro de String. não entendo o porque me ajudem por favor!! abaixo meu código!
private void campoBuscaKeyPressed(java.awt.event.KeyEvent evt) {
int quantCar = campoBusca.getText().length();//pega quantas letras foram digitadas
val.setRowCount(0);//zera a tabela para popular com novo resultado refinado
for (int i = 0; i < listaHistoricos.size(); i++) {
String pesquisa = campoBusca.getText();
String lista = listaHistoricos.get(i).getNomeHistorico().substring(0, quantCar);
if (pesquisa.equalsIgnoreCase(lista)) {
val.addRow(new String[]{
Integer.toString(listaHistoricos.get(i).getCod()),
listaHistoricos.get(i).getTipo(),
listaHistoricos.get(i).getNomeHistorico()
});
}
}
}