Estive pensando se algum meio de fazer isso:
se eu digitar…‘ab’ em um combobox editavel…ele vai me listar ‘abc’,‘abelha’,‘abusado’…sendo que esses dados estao no bd…
eu acho que retornar o valor da coluna deve ser assim:
public String[] listaNC(String cliente){
String[] nm_cliente=new String[this.nRegID()];
try{
stmt=conect.getStatement();
ResultSet rs=
stmt.executeQuery("select nm_cliente from sis_cad_clientes where nm_cliente='"+cliente+"%");
int i=0;
while(rs.next()){
String nome=rs.getString("nm_cliente");
nm_cliente[i++]=nome;
}
}catch(SQLException ex){
System.out.println(ex);
}
return nm_cliente;
}
onde o parametro nome eh o texto que vc digitou dentro da combo…
agora a acao da combo eh que sao outros 500…alguem pode me ajudar…quem sabe a gente faz uma interface swt bem show com bd e disponibiliza de tutorial no site…
1a. A tabela dever conter poucas informacoes, ou entao ficaria muito lento cada vez q se digitasse um caracter na combo.
2a. Caso a afirmativa anteriror seja verdadeira, popula uma lista com ela na inicalização do programa, entao, qd o usuario estiver digitando vc faz a busca na lista, e nao na base a todo momento…
Caso a 1a. consideracao seja falsa, acho isso inviavel pelo fato de se ter q buscar na base o tempo todo!
E se fazer esperar um tempo depois da digitação pra buscar?
Tipo, digita: AB, depois de meio segundo de digitado a ultima letra ai sim vai buscar…pelo menos nao busca pra cada letra digitada… a nao ser que o usuario seja o super lerdo.
[quote=“danieldestro”]E se fazer esperar um tempo depois da digitação pra buscar?
Tipo, digita: AB, depois de meio segundo de digitado a ultima letra ai sim vai buscar…pelo menos nao busca pra cada letra digitada… a nao ser que o usuario seja o super lerdo.[/quote]
Eu fiz isso com javascript, não ta la a melhor coisa, mas funciona bem.
Funcionava mais ou menos da seguinte maneira:
Um <select> preenchido com os dados do resultSet
Um que servia como campo de busca
Toda vez que o usuário digita uma letra (ou backspace), o código faz o filtro novamente. Ao selecionar algum item, um input já é preenchido com o conteudo.
Segue parte do código
// filtra o select baseado nas letras digitadas
// @params
// o select e o field para digitar a busca
function fldSearchSearch_onkeyup( slc, fldSearch )
{
if( event.keyCode == 27 ) //esc
event.srcElement.parentElement.style.visibility = 'hidden';
var slc = document.getElementById( slc );
var fldSearch = document.getElementById( fldSearch );
// o valor atual do campo de busca
var strValor = fldSearch.value.toUpperCase();
slc.innerHTML = "";
var opt;
// preenche o array optTodos com um array previamente preenchido
// com os dados da busca no banco de dados
optTodos = new Array();
if( slc.id == 'slcIdiomas' )
optTodos = optIdiomas;
else if( slc.id == 'slcInformatica' )
optTodos = optInformatica;
else if( slc.id == 'slcEspecialidades' )
optTodos = optEspecialidades;
else if( slc.id == 'slcPosgraduacao' )
optTodos = optPosgraduacao;
else if( slc.id == 'slcFuncoes' )
optTodos = optFuncoes;
else if( slc.id == 'slcDocs' )
optTodos = optDocs;
if( event.keyCode == 40 || event.keyCode == 9 )
slc.focus();
if ( strValor == "" )
{
for( var i = 0; i < optTodos.length; i++ )
{
opt = document.createElement('OPTION');
opt.value = optTodos[ i ][ 1 ];
opt.innerHTML = optTodos[ i ][ 0 ];
slc.appendChild( opt );
}
}
else
{
for( var i = 0; i < optTodos.length; i++ )
{
if( optTodos[ i ][ 0 ].toString().toUpperCase().indexOf( strValor ) == 0 )
{
opt = document.createElement('OPTION');
opt.value = optTodos[ i ][ 1 ];
opt.innerHTML = optTodos[ i ][ 0 ];
slc.appendChild( opt );
}
}
}
fldSearch.style.width = slc.offsetWidth;
}
// preenche o input dependendo das teclas digitadas
// @params
// o select, o input para ser preenchido quando faz uma escolha, o input oculto para preencher o id
// o field, com search e o formulario
function setInput( slc, inpt, idinpt, fldSearchSearch, fm )
{
if( event.keyCode == 27 ) //esc
event.srcElement.parentElement.style.visibility = 'hidden';
var form = fm;
var selectedIndex = slc.selectedIndex;
var idInpt = null;
for( var i = 0; i < form.elements.length; i++ )
{
if( form.elements[ i ].id == inpt )
inpt = form.elements[ i ];
else if( form.elements[ i ].id == idinpt && idInpt == null )
idInpt = form.elements[ i ];
}
var fldSearchSearch = document.getElementById( fldSearchSearch );
// KEY_ENTER
if( event.keyCode == 13 )
{
inpt.innerText = slc.options[ selectedIndex ].text;
if( idInpt != null )
idInpt.innerText = slc.options[ selectedIndex ].value;
searchString = "";
slc.parentElement.style.visibility = 'hidden';
}
// Seta para baixo
else if( event.keyCode == 38 && slc.selectedIndex > 0 )
{
inpt.innerText = slc.options[ selectedIndex - 1 ].text;
if( idInpt != null )
idInpt.innerText = slc.options[ selectedIndex - 1 ].value;
}
else if( event.keyCode == 38 && slc.selectedIndex == 0 )
fldSearchSearch.focus();
// seta para baixo
else if( event.keyCode == 40 && slc.selectedIndex < slc.length - 1 )
{
inpt.innerText = slc.options[ selectedIndex + 1 ].text;
if( idInpt != null )
idInpt.innerText = selectedIndex >= 0 ? slc.options[ selectedIndex + 1 ].value : '';
}
else
{
inpt.innerText = slc.options[ selectedIndex ].text;
if( idInpt != null )
idInpt.value = slc.options[ selectedIndex ].value;
searchString = "";
slc.parentElement.style.visibility = 'hidden';
}
}