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

AWT/Swing Java Discussion :

Rechercher personne de la base de données


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Par défaut Rechercher personne de la base de données
    Salut tout le monde …

    Je suis à la réalisation d’une application de gestion sous netBeans pour cela j’ai besoin de rechercher des personnes qui existent dans ma base de donnée ,j’ai pensé à faire une recherche (comme sur google ) sur le JTextField de recherche quand je tape le dèbut du nom une liste s’affiche au dessous du JTextField et je veux en cliquant sur la bonne personne ses information s’affiche…

    Je me demande comment le faire…(je ne cherche pas la requete SELECT… mais plutôt la démarche java pour afficher la liste et ce qui s’en suit)

    Merci d’avance pour votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    Citation Envoyé par selmagsi Voir le message
    Salut tout le monde …

    Je suis à la réalisation d’une application de gestion sous netBeans pour cela j’ai besoin de rechercher des personnes qui existent dans ma base de donnée ,j’ai pensé à faire une recherche (comme sur google ) sur le JTextField de recherche quand je tape le dèbut du nom une liste s’affiche au dessous du JTextField et je veux en cliquant sur la bonne personne ses information s’affiche…

    Je me demande comment le faire…(je ne cherche pas la requete SELECT… mais plutôt la démarche java pour afficher la liste et ce qui s’en suit)

    Merci d’avance pour votre aide.
    Déjà pour afficher les informations tu peux utiliser les JTables, maintenant pour la recherche tu peux utiliser les évênements keytyped du JTextFields

  3. #3
    Membre expérimenté Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Par défaut
    Bonjour,
    dans ton cas, à mon sens liste+JTextField=jComboBox!
    en tous cas c'est ce j'ai utilisé pour avoir la liste des personnes enregistrées dans ma bdd:
    1-je remplis d'abord une arrayList à partir de ma base;
    2-j'alimente avec mon jComboBox avec la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(liste_personne.toArray()));
    3-enfin si tu veux faire de la saisie semi automatique dans ce même jComboBox, tu peux te servir de la classe suivante
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.text.*;
    public class ComboSelection  extends PlainDocument {
        JComboBox comboBox;
        ComboBoxModel model;
        JTextComponent editor;
        // flag to indicate if setSelectedItem has been called
        // subsequent calls to remove/insertString should be ignored
        boolean selecting=false;
     
        public ComboSelection (final JComboBox comboBox) {
            this.comboBox = comboBox;
            model = comboBox.getModel();
            editor = (JTextComponent) comboBox.getEditor().getEditorComponent();
            editor.setDocument(this);
            comboBox.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if (!selecting) highlightCompletedText(0);
                }
            });
            editor.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    if (comboBox.isDisplayable()) comboBox.setPopupVisible(true);
                }
     
            });
            // Handle initially selected object
            Object selected = comboBox.getSelectedItem();
            if (selected!=null) setText(selected.toString());
            highlightCompletedText(0);
        }
     
        public void remove(int offs, int len) throws BadLocationException {
            // return immediately when selecting an item
            if (selecting) return;
            super.remove(offs, len);
        }
     
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
            // return immediately when selecting an item
            if (selecting) return;
            // insert the string into the document
            super.insertString(offs, str, a);
            // lookup and select a matching item
            Object item = lookupItem(getText(0, getLength()));
            if (item != null) {
                setSelectedItem(item);
            } else {
                // keep old item selected if there is no match
                item = comboBox.getSelectedItem();
                // imitate no insert (later on offs will be incremented by str.length(): selection won't move forward)
                offs = offs-str.length();
                // provide feedback to the user that his input has been received but can not be accepted
                comboBox.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);
            }
            setText(item.toString());
            // select the completed part
            highlightCompletedText(offs+str.length());
        }
     
        private void setText(String text) {
            try {
                // remove all text and insert the completed string
                super.remove(0, getLength());
                super.insertString(0, text, null);
            } catch (BadLocationException e) {
                throw new RuntimeException(e.toString());
            }
        }
     
        private void highlightCompletedText(int start) {
            editor.setCaretPosition(getLength());
            editor.moveCaretPosition(start);
        }
     
        private void setSelectedItem(Object item) {
            selecting = true;
            model.setSelectedItem(item);
            selecting = false;
        }
     
        private Object lookupItem(String pattern) {
            Object selectedItem = model.getSelectedItem();
            // only search for a different item if the currently selected does not match
            if (selectedItem != null && startsWithIgnoreCase(selectedItem.toString(), pattern)) {
                return selectedItem;
            } else {
                // iterate over all items
                for (int i=0, n=model.getSize(); i < n; i++) {
                    Object currentItem = model.getElementAt(i);
                    // current item starts with the pattern?
                    if (startsWithIgnoreCase(currentItem.toString(), pattern)) {
                        return currentItem;
                    }
                }
            }
            // no item starts with the pattern => return null
            return null;
        }
     
        // checks if str1 starts with str2 - ignores case
        private boolean startsWithIgnoreCase(String str1, String str2) {
            return str1.toUpperCase().startsWith(str2.toUpperCase());
        }
     
    }
    tu l'utilise ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     new ComboSelection (jComboBox1);
    et tu ajoute à la fin ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     jComboBox1.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
    et bon courage!

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Pour ma part, sa demande se rapproche davantage d'une fonction d'auto-complétion. Certains ont déjà eu ce genre de problématique en Swing ici : http://download.java.net/javadesktop...e-summary.html
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Membre expérimenté Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Par défaut
    oui c'est ça, par saisi semi automatique je voulais dire auto-complétion! j'ai pas trouvé les bons termes!

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    Pour ma part, sa demande se rapproche davantage d'une fonction d'auto-complétion. Certains ont déjà eu ce genre de problématique en Swing ici : http://download.java.net/javadesktop...e-summary.html

    On peut voir des fils sur ce sujet sous Stackoverflow : http://www.stackoverflow.com/questio...-dropdown-list
    Je crois que ta méthode est beaucoup plus jolie et efficace que la mienne merci pour tes liens

  7. #7
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Par défaut
    merci à tous pour votre attention...
    merci infiniment Kalina de m'avoir poussé le code,je l'ai testé mais ça n'affiche rien malgré que ma liste est bien remplie

    encor merci
    cordialement

  8. #8
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Par défaut
    je veux récupérer le texte que je saisi sur JComboBox pas avec getSelectedItem mais le texte saisi et le item n'existait pas dans JComboBox
    merci d'avance pour votre aide

    je veux faire une auto complétion sur JCombobox ,c'est à dire des que je saisis par exemple "se" je commence à avoir les nom commençants par "se" voila ma requete:
    query =("SELECT nom FROM patient WHERE nom LIKE '"+X+"%'");

    à la palace de X je veux récupérer ce que j'ai tapé sur JCombobox

    merci

  9. #9
    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 : 56
    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,

    Si les items mis le JComboBox sont dans une classe donnée (mettons MyItem, pour l'exemple suivant), autre que String, tu peux faiire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Object selectedItem = combo.getSelectedItem();
    if ( selectedItem instanceof MyItem ) {
       // l'item sélectionné existe dans le modèle
    } else {
       // l'item sélectionnée n'existe pas dans le modèle et est forcément de type String
       String text = (String)selectedItem;
       // et là tu peux faire ce que tu veux avec
    }
    Sinon, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((JTextField)combo.getEditor().getEditorComponent()).getText();
    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.

  10. #10
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Par défaut
    merci Joel
    c'est ce que je cherche ((JTextField)combo.getEditor().getEditorComponent()).getText(); en principe
    mais je l'ai essayé et ça n'a pas marché ni avec le Action performed ni keyRealised ,c'est quoi le probléme?
    merci

  11. #11
    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 : 56
    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
    Ah, ok, ce n'est pas la même chose : tu cherches à détecter les modifications de la valeur. Dans ce cas, il faut poser un DocumentListener sur l'éditeur.

    En code un peu bourrain, mais simple, ça donnerait ça :

    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
     ((JTextField) editor).getDocument().addDocumentListener(new DocumentListener() {
                @Override
                public void insertUpdate(DocumentEvent documentEvent) {
                     updateInputText();
                }
     
                @Override
                public void removeUpdate(DocumentEvent documentEvent) {
                     updateInputText();
                }
     
                @Override
                public void changedUpdate(DocumentEvent documentEvent) {
                     updateInputText();
                }
     
                private void updateInputText() {
                      // et là tu peux lire le texte saisi avec la méthode donnée précedemment
                }
     
     
            });
    Je dis bourrain, parce qu'on pourrait procéder de façon plus adaptée à chaque méthode, respectivement, celle qui ajoute des caractères, celle qui enlève des caractères et celle qui modifie des caractères : justement pour une auto-completion, ça peut être intéressant de savoir de réagir plus finement.
    Si par exemple on ajoute, on sait qu'on a déjà chargé au moins tous les éléments, et on est pas obligé de refaire la requête sur la base, mais seulement filtrer sur le résultat précédent, par exemple. Ou en cas d'ajout, lancer un timer qui lance la requête au bout d'un certain temps, et qui annule la requête lancée précédemment : ainsi, si l'utilisateur tape suffisemment vite, on lance pas plusieurs requêtes, mais uniquement celle qui correspond au mot quand il a fini de taper.
    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.

  12. #12
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Par défaut
    j'ai pas compris le code,ou est le JComboBox dans tout ça?
    et est ce que je dois travailler tout ça hors une action sur le JComboBox??

    merci

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 48
    Par défaut
    Avez vous ajouté un Listener à votre combobox (du genre ce qui suit)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
             String [] donnees = new String [5];//par exemple
            JComboBox jcb = new JComboBox(donnees );
            jcb.setEditable(true);
            jcb.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               System.out.println("Vous avez choisi " + (
                            (JComboBox)e.getSource()).getSelectedItem()  + "!");
               }
              });
    Cela suppose que avez chargé des données avant. Sinon il faut trouver un moyen d'en ajouter.

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

Discussions similaires

  1. recherche d'un logiciel base de données
    Par carottercl dans le forum Débuter
    Réponses: 3
    Dernier message: 18/02/2008, 23h20
  2. Réponses: 0
    Dernier message: 16/11/2007, 11h00
  3. Recherche croisé dans une base de donnée
    Par elephant13 dans le forum C#
    Réponses: 1
    Dernier message: 24/03/2007, 15h26
  4. Recherche d'exemples de base de données!
    Par jessy212 dans le forum Débuter
    Réponses: 3
    Dernier message: 15/09/2006, 16h51

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