Recherche auto-complétion

[Résolu]
Signaler
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011
-
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011
-
salut

je veut faire une recherche auto-complétion c'est à dire fur à mesure que je tape les lettres du nom que je cherche il me fait des propositions des noms qui existes dans la base de données .mais je ne sais pas comment faire?
merci d'avance pour votre aide.

19 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Bonjour,

ess.boit[i][1] ne contient pas plus de 6 caractères donc, tu ne peux pas récupérer les caractères suivants.

Pour que celà fonctionne ajoute un if(ess.boit[i][1].length>mot.length()){
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Bonjour, quel est ton problème exactement, ou se situe ta difficulté ?
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

mon problème est que j'ai aucune idée sur la recherche auto-complétion.
Messages postés
159
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
7 mai 2012

Tu commences ton programme en chargeant ton fichier où l'on retrouve tout les mots dans une liste (arraylist par exemple).
Après tu compares, à chaque fois que tu tapes une lettre, le mot (ou la lettre) se trouvant dans ton champ avec les mots de la liste.
Chaque fois que tu as un mot comportant le même lettrage de début (compare en faisant un substring), tu l'ajoutes dans un tableau, qd tu as fait le tour de tout les mots de ta base de mots, tu l'affiches.
Il existe de bien meilleur manière comme la table de hachage qui te permettra d'aller plus rapidement vers les mots recherchés, mais cette manière te permettra d'avoir un avant gout de tout les éléments d'affichage et de comparaison des mots dont tu auras besoin pour, si tu veux, par la suite travailler avec ce système

Bon courage
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Essayes déjà de le faire fonctionner avec un dictionnaire de taille assez réduite. La difficulté de ce genre d'exercice est de ne pas saturer la mémoire.

Charger tous les mots en mémoire est une bonne chose à faire pour commencer mais qui sera peut être à revoir par la suite.

Essayes d'éviter de créer un thread qui analyse toutes les secondes ta zone de texte mais effectue l'action dès qu'il y a un changement sur la zone de texte.

Tiens nous au courant de ton avancement et on te donnera d'autres conseils.
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

je vais essayer.merci.
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

jusqu'à maintenait j'ai mal à s'en sortir .
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Bonjour,

On ne peut pas tout faire à ta place. Si tu as un problème précis pose ta question mais sinon, nous ne pouvons pas t'aider.
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

j'ai deux problèmes :

1-je cherche l'action du JTextfield qui réagit chaque fois qu'on tape une lettre dans cette dernière.

2-comment afficher les propositions (comme la recherche google il nous propose des suggestions du notre recherche).merci infiniment.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Bonjour,

Tout d'abord, utilises un JTextArea plutot qu'un JTextField.

Ensuite, pour être notifié des changements du texte, utilises un KeyListener http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/KeyListener.html

Et enfin, Tu peux utiliser une JList que tu affiches sous le mot en question pour les propositions.
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

Bonjour;

est ce que une JComboBox éditable se ne serais pas une solution??
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Si tu veux afficher les possibilités dans une JComboBox à la place de la JList que je t'avais conseillé, oui, c'est une autre possibilité tout aussi bonne.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Je pense que l'auto-complétion que tu cherches à faire n'est pas sur un mot mais sur l'ensemble des mots du texte mais je n'en suis pas certain.

Si tu cherches juste à compléter un mot, oui la JComboBox éditable est une bonne solution (la meilleure sans doute)
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
Salut, ;o)

Perso, je prefere quand meme la JListe ;o) le renderer est beaucoup plus facil à gérer ;o)

GodConan ;o)
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

la recherche auto-complétion que je cherche à faire peut être sur 1,2 ou 3 mots maximums ,car je cherche des noms des boites d'archive stocké dans la BDD.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Bonjour,

JE viens de poster un code qui permet de faire de l'auto-complétion, t l'adapteras sans doute facilement à ta problématique : http://www.javafr.com/codes/COMPLETION-AUTOMATIQUE_53480.aspx

Bon courage
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

merci,je vais voir...
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

sayer je suis arriver à la faire mais j'ai un petit souci quand le nom à recherché dépasse les 6 caractères une exception s'affiche voila le code du comparaison des mots:
for(int f=0;f<lon;f++){
if(mot.charAt(f)==ess.boit[i][1].charAt(f)){
System.out.println("cha match:"+f );
}
}

et l'exception qui s'affiche :
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
    at java.lang.String.charAt(String.java:686)

je ne sais pas pourquoi ?
Messages postés
16
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
24 août 2011

c'est résolu .merci infiniment.