AutoCompletar com pesquisa

9 respostas
evertonsilvagomesjav

Boa noite pessoal.

Tem como eu começar a digitar em um jTextField um nome de alguem, e na medida que eu for digitando ele ir buscando o nome relacionado no BD?

Se tiver tem como alguem me ajudar, algum tutorial, artigo algo assim pra eu ler?

9 Respostas

JonnyStayle

Não vai ser tão simples você vai ter que implemantar um código que fassa duas ou mais tarefas ao mesmo tempo.

De uma pesquisada sobre threads que acho que você consegue implementar seu código.

1° Recebe dados e ao mesmo tempo ja vai fazendo a busca no BD.
2° Mostrar possiveis resultados com o digitado até o momento.
3° Selecionar o resultado e se alto completar.

Acho que essa seria a lógica.

davidbuzatto

Um keylistener não resolve seu problema?

Entrou um novo caractere? Pesquisa no banco.
Vc pode definir uma quantidade mínima de caracteres para iniciar a busca. Ai vc não desperdiça processamento do banco p/ retornar nomes que iniciam com somente uma ou duas letras.
Outro problema é onde vc vai colocar o que vai sendo obtido?
Recomendo que você use a classe SwingWorker para executar essa tarefa evitando que sua GUI seja “trave” visto que o Swing não é thread safe.

[]´s

AlexandreGama

Fala Everton!

Creio que seria como o davidbuzatto indicou, o Keylistener poderia resolver o problema.
Como ele indicou, poderia ser com acesso ao banco para cada caracter ou cadeia de caracteres.

Também já vi um pessoal criando uma lista das informações do banco e acessando
os dados em memória, justamente para diminuir o número de acessos ao BD.
Aí entra a sua necessidade e se isso seria possível a implementação para os seus dados.

Como bem lembrou o david, o SwingWorker é bacana e recomendado pela comunidade.
https://swingworker.dev.java.net/

Até!

davidbuzatto

O SwingWorker foi inserido no JDK a partir da versão 6 :wink:
Então vc não precisa baixar nada se estiver usando a versão 6 do JDK.

[]´s

AlexandreGama

Bem lembrado! :smiley:

Até!

Eric_Yuzo

Acho que um DocumentListener se adapta melhor nesta situação. Pois vai pegar qualquer alteração no texto, seja ela pelo teclado ou colando um texto com o mouse.

Se quiser algo pronto, se não me engano o SwingX tem componentes para Auto-Completion.

evertonsilvagomesjav

Hum ok, vou pesquisar sobre KeyListener e vou tentar.

Eric vc tem algo sobre DocumentListener e SwingX que possa me ajudar?

Obrigado á todos.

Eric_Yuzo

O DocumentListener ouve alterações no texto do Document do text field. A vantagem dele para um KeyListener é que ele não vai ser disparado com qualquer tecla, como as setas ou as teclas de controle. Além disso ele será acionado se eu copiar e colar um texto com o mouse.

textField.getDocument().addDocumentListener(new DocumentListener() { public void removeUpdate(DocumentEvent e) { //Faz alguma coisa quando conteúdo é removido } public void insertUpdate(DocumentEvent e) { //Faz alguma coisa quando conteúdo é inserido } public void changedUpdate(DocumentEvent e) { //Utilizado com style documnets } });Dentro dos métodos insertUpdate e removeUpdate teria que implementar um método que faça a consulta no BD.

Quanto ao SwingX eu não conheço muito bem. Mas segue o link do projeto e um tópico que fala um pouco sobre o assunto.

https://swingx.dev.java.net/

http://www.guj.com.br/posts/list/100120.java

evertonsilvagomesjav

Eric Yuzo:
O DocumentListener ouve alterações no texto do Document do text field. A vantagem dele para um KeyListener é que ele não vai ser disparado com qualquer tecla, como as setas ou as teclas de controle. Além disso ele será acionado se eu copiar e colar um texto com o mouse.

textField.getDocument().addDocumentListener(new DocumentListener() { public void removeUpdate(DocumentEvent e) { //Faz alguma coisa quando conteúdo é removido } public void insertUpdate(DocumentEvent e) { //Faz alguma coisa quando conteúdo é inserido } public void changedUpdate(DocumentEvent e) { //Utilizado com style documnets } });Dentro dos métodos insertUpdate e removeUpdate teria que implementar um método que faça a consulta no BD.

Quanto ao SwingX eu não conheço muito bem. Mas segue o link do projeto e um tópico que fala um pouco sobre o assunto.

https://swingx.dev.java.net/

http://www.guj.com.br/posts/list/100120.java

Pô velho, muito obrigado, vou fazer os testes e posto aqui qualquer coisa.

Criado 14 de outubro de 2010
Ultima resposta 15 de out. de 2010
Respostas 9
Participantes 5