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 :

Vérifier qu'un jtextfield n'est pas vide


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Points : 15
    Points
    15
    Par défaut Vérifier qu'un jtextfield n'est pas vide
    bonjour ,

    j'ai crée un formulaire , à partir de ce formulaire je peux mettre à jour la carte client dans la BDD .

    comment faire pour que mes jtextfield ne puissent pas etre vides par defaut , afin de ne pas pouvoir valider mon update si un des champs est vide ?

    merci d'avance pour votre aide

  2. #2
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il y a 2 aspects : la validation des valeurs à passer au update qui n'a rien à voir avec les champs de saisie (ou avec le fait qu'on saisisse dans une interface graphique et le feedback donné à l'utilisateur pour lui faire comprendre qu'il saisit des valeurs non autorisées, ou l'empêcher même de le faire).

    Pour la première partie, il suffit de faire une méthode qui valide les champs selon les règles et qui renvoit true si c'est ok et false sinon. Par exemple, dans ton cas, tester si la variable String correspondant à ta données n'est pas vide (avec !chaine.isEmpty()).

    Ensuite, il suffit de ne pas lancer la requête si la méthode retourne false. Et dans le cas ou ça retourne false, on affichera, par exemple, un message (JOptionPane) pour indiquer les champs qui devraient ne pas être vides le cas échéant.

    Le second aspect est déjà plus vaste et peut être fait de différentes manières : on peut par exemple, autoriser la saisie de valeurs incorrectes et activer ou pas un bouton "Sauvegarder" dans un formulaire en fonction du résultat de cette méthode : il faut appeler la méthode pour tout action de modification faite dans le champ de saisie et appeler setEnabled(true) ou setEnabled(false) sur le bouton, selon.

    Pour écouter la validation de la saisie d'un champ, on enregistre un ActionListener sur le champ (jtextfield.addActionListener(...)). Pour écouter les modifications faites au fur et à mesure, on pourra utiliser un DocumentListener (jtextfield.field.getDocument().addDocumentListener());

    On peut afficher des indications graphiques de mauvaises saisies (message dans le formulaire, bordure rouge ou icône...) qu'on affichera ou pas de la même manière qu'on détermine s'il faut activer ou pas le bouton de sauvegarde ci-avant.

    On peut interdire également la saisie des valeurs incorrectes : on peut utiliser un InputVerifier pour valider le contenu du champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    field.setInputVerifier(new InputVerifier() {
     
       @Override
       public boolean verify(JComponent input) {
          return ((JTextField)input).getText().length()>0;
       }
     
    });
    Celui-ci ne sera déclenché que lorsqu'on tente de sortir du champ (on peut donc saisir une valeur vide), mais on ne pourra pas sortir (ni par tabulation, ni en cliquant sur un autre champ), mais on pourra lancer des actions (cliquer sur un bouton dans le formulaire), donc il faudra de toute manière toujours vérifier la valeur des champs avant de lancer la requête.

    On peut également directement empêcher l'utilisateur de vider le champ, en utilisant un DocumentFilter :

    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
    ((AbstractDocument)field.getDocument()).setDocumentFilter(new DocumentFilter() {
       @Override
       public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
          if ( !(offset==0 && length==field.getText().length() && text.isEmpty() ) {
              // on ne fait un remplacement de texte que si on ne remplace pas tout le texte par une chaine vide
              super.replace(fb, offset, length, text, attrs);
          }
       }
     
       @Override
       public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
          if ( !(offset==0 && length==field.getText().length() ) ) {
              // on ne fait la suppression  que si on ne supprime pas tout le texte
             super.remove(fb, offset, length);
          }
       }
    })
    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.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    merci pour ta réponse je vais tester tout ça et reviens vers toi pour te dire si ça s'est arrangé

    (et bien sûr pour le bouton résolu si c'est le cas ^^)

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    mais ceci dit je pensais plus un "required" comme en html.... ça existe ça? ^^

  5. #5
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Non.
    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.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    alors j'ai tenté cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private boolean CheckEmptyField(String field){
    	if(!field.isEmpty()){
    		System.out.println("ok");
    		return false;
    	}else{
    		javax.swing.JOptionPane.showMessageDialog(null,
    				"Ce champ ne peut pas être vide");	
    		return true;
    	}
     
     
    	}
    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
    try {
    							// mise à jour de la base de données avec les nouvelles valeurs
    							// venant de la carte client
    							if (CheckEmptyField(nom)){
    								System.out.println("pas bon");
    							}else{
    								System.out.println("ok");
    								gestion.updateClient(client);
    							}
     
     
    						} catch (Exception e) {
     
    							e.printStackTrace();
    						}
    et cela fonctionne mais problème ,j'ai une dizaine de champs à vérifier , je ne vais pas appeler 10 fois ma méthode je suppose ^^

  7. #7
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si, tu vas l'appeler autant de fois qu'il y a de champ à valider avec cette même règle, mais il faut séparer la partie validation de la partie update.

    Si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private boolean checkField(String field){
    	if!field.isEmpty()){ 
    		return false;
    	}else{
    		return true;
    	}
     }
    ou


    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try 
    	// mise à jour de la base de données avec les nouvelles valeurs
    	// venant de la carte client
    	if (checkField(nom) && chefckField(prenom) ){
    	    gestion.updateClient(client);
    	}else{ 
    	    JOptionPane.show ...
    	}
     } catch (Exception e) {
     ...
    }




    Ensuite, pour éviter d'avoir plusieurs conditions avec l'appel méthode de validation, tu peux stocker tes champs dans un tableau ou une collection, et itérer dessus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public boolean checkFields(String...fields) {
        for(String field : fields) {
            if ( !checkField(field) ) return false;
        }
        return true;
    }
    et l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try 
    	// mise à jour de la base de données avec les nouvelles valeurs
    	// venant de la carte client
    	if (chefckFields(nom, prenom) ){
    	    gestion.updateClient(client);
    	}else{ 
    	    JOptionPane.show ...
    	}
     } catch (Exception e) {
     ...
    }
    Par contre, tu ne pourras pas afficher dans le détail les champs qui manquent : mais tu pourrais retourner une liste des champs invalides, par exemple, au lieu d'un booléen (si la liste est vide, tous les champs sont valides)
    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.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    que signifient les 3 points dans :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    public boolean checkFields(String...fields)

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Les trois points indiquent qu'on peut avoir un nombre quelconque de valeurs de type String, en paramètre de la méthode, valeurs qui seront récupérées dans la méthode sous forme d'un tableau.

    Ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public boolean checkFields(String...fields) {
        for(String field : fields) { // ici fields est un tableau de String
            if ( !checkField(field) ) return false;
        }
        return true;
    }
    C'est un peu comme écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public boolean checkFields(String[] fields) {
        for(String field : fields) {
            if ( !checkField(field) ) return false;
        }
        return true;
    }
    Mais la différence essentielle, c'est que quand on appelle la méthode, dans le premier cas on peut l'appeler comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String nom = "xxxx";
    String prenom = "xxxxxxxx";
    checkFields(nom, prenom);
    Alors que dans le second, il faudrait écrire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String nom = "xxxx";
    String prenom = "xxxxxxxx";
    checkFields(new String[]{nom, prenom});
    A noter que pour le premier cas, le second appel, avec tableau fonctionne aussi.

    A noter enfin que seul le dernier paramètre d'une méthode peut être déclaré comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maMethode(int param1, String param2, int...desParams) { // ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maMethode(int param1, int...desParams, String param2) { // ne compile pas
    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 à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    ça fonctionne nickel

    un énorme merci à toi

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

Discussions similaires

  1. [AC-2003] Vérifier que le résultat d'une requête (n')est (pas) vide
    Par pedrus16 dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/06/2009, 15h34
  2. Comment vérifier si une structure n'est pas vide
    Par colorid dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2008, 00h01
  3. Réponses: 10
    Dernier message: 15/01/2008, 12h03
  4. Réponses: 6
    Dernier message: 09/01/2008, 11h56
  5. Champ ds état visible ssi il n'est pas vide !
    Par Fredri dans le forum Access
    Réponses: 11
    Dernier message: 20/12/2005, 12h15

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