IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

comment faire une recherche


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de happyboon
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 192
    Par défaut comment faire une recherche
    Bonjour à tous ceux qui me lisent actuellement
    Bon je reconnais que le titre du message est vague mais je vais essayer d' être plus précis
    J'ai fais la liste des produits d'une boite dans une JCombo, mais il ya au moins 200 produits. C'est pas joli joli à voir et pas pratique à utiliser
    Ce que je voudrais c'est faire en sorte que il y ait une zone comme pour faire une recherche et au fur et à mesure que l'on saisit les caractères d'un produit,
    les produits qui ont le même début de caractères s'affichent en dessous de la zone de "recherche",
    et l'utilisateur peut cliquer sur un produit parmis cette liste.
    Quel outil je dois utiliser et si quelqu'un pouvait me referencer un cour parlant exactement de ça pour que je m'en imprègne.
    Merci

  2. #2
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Une réponse donnée sur ce même forum : http://www.developpez.net/forums/d68...es-deja-entre/

    Sinon tu cherches "autocompletion JCombobox SWING" et t'as au moins 5 façons de faire sur Google .

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Par défaut
    Bonjour,
    J'ai tenté de réaliser cela. Ça peut très certainement être bien amélioré et bien plus optimisé mais ça fonctionne ^_^ (Surtout si jamais un plus grand volume de données sera utilisé dans le futur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    		productList.add("Aspirateur");
    		productList.add("Moteur");
    		productList.add("Tondeuse");
    		productList.add("Machine à laver");
    		productList.add("Fer à repasser");
    		productList.add("Mixeur");
    		productList.add("Micro-ondes");
    		productList.add("Four");
    		productList.add("Plaque de cuisson");
    		//...
     
    		JPopupMenu suggestions = new JPopupMenu();
    		suggestions.setMinimumSize(new Dimension(200 , 25));
    		suggestions.setFocusable(false);
     
    		JTextField searchField = new JTextField();
    		searchField.setPreferredSize(new Dimension(200 , 25));
     
    		searchField.addCaretListener(new CaretListener() {
     
    			@Override
    			public void caretUpdate(CaretEvent e) {
    				suggestions.removeAll();
    				for(String s : productList)
    					if(s.startsWith(searchField.getText()))
    						suggestions.add(new JMenuItem(s));
    				if(suggestions.getComponents().length > 0) {
    					suggestions.show(searchField, searchField.getX(), searchField.getY() + searchField.getHeight());
    					suggestions.pack();
    					suggestions.revalidate();
    					suggestions.repaint();
    				}
    			}
     
    		});

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    On appelle ce genre de fonctionnalité, autocomplete "truc", un peu à tord je trouve, parce que ça ressemble à fonctionnalité d'autocompletion qu'on a dans les éditeurs.

    On peut trouver des JComboBox de type Autocomplete (comme ici), mais si j'ai bien compris, toi tu voudrais que le résultat de la recherche s'affiche dans un autre composant (une JList par exemple, ou une JTable).

    Il y a 2 principes applicables :

    • tout charger et filtrer en mémoire : bien sûr, tout charger n'est envisageable que si le jeu de données est limittée mais également s'il est peu enclin a être modifié. Par exemple, une liste d'utilisateurs dans une base de 100 noms est tout à fait envisageable. C'est ensuite très facile à mettre en oeuvre (et tout se fait en Java) et c'est plutôt rapide au niveau exécution. En plus, s'il y a une notion de conservation de sélection, c'est automatique (ou presque).
      Avec une JTable, tu pourras utiliser TableRowSorter.setRowFilter().
    • Faire une requête différente à chaque changement dans le filtre.
      En gros, à chaque nouveau caractère tapé, tu fais une requête SQL : un like par exemple, avec comme paramètre les caractères tapés suivis de % te donnera tous les enregistrements dont le champ comparé commence par ces caractères.
      C'est un peu plus long d'exécution, puisqu'il faut faire une requête à chaque nouveau caractère : on peut améliorer ça de différentes manières, plus ou moins complexe (cache, combiner filtre et requête)
      C'est un peu plus compliqué à mettre en place : il faut écouter la frappe par un DocumentListener à directement enregistrer sur le document du champ de saisie.
      Il faut penser que si à chaque caractère, on envoie une requête, et que l'utilisateur tape directement 10 caractères en 1,5secondes, il faudra attendre le résultat de 9 requêtes à faire pour rien, avant de pouvoir faire la requête utile. L'utilisateur peut attendre longtemps le résultat. Il faut donc gérer ça, en annulant les résultats intermédiaires. On peut également complexifier en faisant une première requête, et en filtrant pour la suite (le résultat pour 4 lettres est compris dans le résultat pour 3 lettres).
      Il faut tenir compte des spécificités au début de la frappe :
      • si le champ est vide, on ne va pas faire like "%", on ramènerait toute la table
      • si le champ contient 1 seul caractère, ou 2, on risque aussi de ramener beaucoup de caractères. On peut demander de taper un minimum de caractères avant de lancer la première requête. On peut prévoir que pour 1 ou 2 caractères, on ramène une liste vide. On peut aussi faire mécanismes qui chargent progressivement les données correspondant à chaque nouvelle requête.


    Bien évidemment, au vu de tout ce que je viens de dire, avoir un composant qui fasse tout ça déjà, qu'on ait juste a paramétrer, ce serait mieux. Je n'en connais pas de standard en SWING personnellement, qui ne soit pas du premier type que j'ai indiqué (http://www.java2s.com/Code/Java/Swin...teComboBox.htm).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre très actif Avatar de happyboon
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 192
    Par défaut grand merci
    merci pour vos multiples réponses c'est gentil
    je vais ve mettre à l'oeuvre

  6. #6
    Membre très actif Avatar de happyboon
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 192
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    mais si j'ai bien compris, toi tu voudrais que le résultat de la recherche s'affiche dans un autre composant (une JList par exemple, ou une JTable).

    .
    oh pas nécessairement tout ce que je veux est que l'autocomplétion marche et eviter à l'utilisateur de parcourir une liste de 200 articles pour trouver et cliquer sur ce qu'il veut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#][XML] Comment faire une recherche?
    Par l3b3lge dans le forum ASP.NET
    Réponses: 4
    Dernier message: 10/10/2006, 10h10
  2. Réponses: 3
    Dernier message: 08/09/2006, 18h00
  3. Réponses: 5
    Dernier message: 03/08/2006, 08h03
  4. Comment faire une recherche dans ACCESS
    Par Bass_Room dans le forum Access
    Réponses: 2
    Dernier message: 02/06/2006, 10h51
  5. Comment faire une recherche/remplacement sous Linux
    Par fabszn dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 07/02/2006, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo