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

Composants Java Discussion :

JTextField + absence de valeur !


Sujet :

Composants Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut JTextField + absence de valeur !
    Salut,

    j'ai plusieurs JTextField dont les valeurs saisies sont utilisées lorsque l'on appuie sur un bouton. L'idée, c'est que l'utilisateur n'est pas obligé de remplir ces champs donc ils restent vides ce qui me pose problème !

    J'ai le code suivant qui teste et traite les JTextField :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // On teste si une valeur a été entrée
    if (latMin.getText() != null) {
     
    Double latMinVal = new Double((latMin.getText()).trim());
    double latMinus = latMinVal.doubleValue();
    ...
    }
    Ca coince à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Double latMinVal = new Double((latMin.getText()).trim());
    Et j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Exception in thread "AWT-EventQueue-1" java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at java.lang.Double.valueOf(Unknown Source)
    at java.lang.Double.<init>(Unknown Source)
    at OngletSelect.getRequete(OngletSelect.java:345)
    Apparemment, la condition du getText() est validée malgré l'absence de valeur don c'est plutôt gênant...

    Merci d'avance pour vos idées

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Si l'utilisateur ne rentre rien, getText() doit te renvoyer une chaine vide, ce qui est différents de null...

    a++

    PS : De plus puisqu'il s'agit d'une saisie utilisateur, tu devrais rajouter un try/catch autour de ton new Double() pour gérer les NumberFormatException lorsque la valeur ne correspond pas à un nombre...

  3. #3
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 134
    Points
    134
    Par défaut
    En plus getText() te retourne un String, il vaut donc mieux utiliser la méthode equals().

  4. #4
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Merci à vous 2, le résultat est déjà meilleur !

    Par contre, si j'entre des lettres dans ces champs, il ne semble pas qu'une exception soit lancée ! Comment faire par exemple pour gérer ces cas ? Il serait intéressant d'écrire en rouge la mauvaise valeur dans le champ, histoire que l'utilisateur comprenne.

  5. #5
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 134
    Points
    134
    Par défaut
    instanceof?

    (avec try catch sur un cast en double de ton getText resultat t'as pas d'exception si c'est un string??? tu lui as bien précisé quoi faire en cas d'exception?)

  6. #6
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Voici un lien qui pourrait t'intéresser

    http://java.developpez.com/faq/java/...Text_contraint

  7. #7
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    J'ai pas cherché à faire quelque chose d'élaboré mais juste à voir si je pouvais attraper une exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (!longMin.getText().equals("")) {
        try {
    	longMinVal = new Double(longMin.getText().trim());
    	longMinus = longMinVal.doubleValue();
        }
        catch (NumberFormatException nfe) {
    	System.out.println("Valeur entrée non numérique !");
        }
    }
    Apparemment, si je tape 23a, 3a1 ou n'importe quoi de ce genre, rien n'est levé si ce n'est une exception SQL parce que j'utilise ce qui est entré par l'utilisateur dans une requète d'où l'importance d'avoir de bonnes données entrées.

    saod, je vais regarder ce que tu m'a mis en lien : ça a l'air plutôt pas mal !


    Merci

  8. #8
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Essai d'utiliser la péthode parseDouble de Double, perso c'est comme ça qye je fais.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String maChaine=monTextField.getText();
    double monDouble;
    if(!maChaine.equals("")){
       try{
          monDouble=Double.parseDouble(maChaine);
       }catch(NumberFormatException nfe){
          System.err.println("Erreur de format de double.");
          nfe.printStackTrace();
       }
    }

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    d'ailleurs saod,

    j'aurais une question, je n'arrive pas trop à comprendre la mécanique pour contraindre un JTextFormattedField.
    J'aimerais le contraindre à des nombres mais malgré plusieurs essais, ce fut peu fructueux et cette élément est peu détaillé je trouve.

    Merci

  10. #10
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    J'ai testé la Méthode 3 du guide de saod sans trop cherche à comprendre mais ça a l'air bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    NumberFormat nf = NumberFormat.getNumberInstance();
    nf.setParseIntegerOnly (true);
     
    JFormattedTextField latMin = new JFormattedTextField(nf);		((DefaultFormatter) latMin.getFormatter ()).setAllowsInvalid (false);
    Ca marche mais le truc, c'est que l'affichage du champ dans mon Applet est tassé car auparavant, je faisais un new JTextField(value) avec 'value' qui empêchait que le champ ne se recroqueville sur lui-même lorsqu'il est vide !

    De plus, une fois que j'ai entré une valeur, le premier chiffre ne peut plus être supprimé après !

    Merci iohack, la méthode parseDouble, je ne m'en souvenais plus de celle-ci ! Je l'avais déjà utilisée mais en des temps trop lointains pour que je m'en rappelle !

    Si je ne trouve pas de solution pour le JFormattedTextField, je prendrai ça qui a l'air plus simple d'ailleurs !

  11. #11
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par ceres02
    d'ailleurs saod,

    j'aurais une question, je n'arrive pas trop à comprendre la mécanique pour contraindre un JTextFormattedField.
    J'aimerais le contraindre à des nombres mais malgré plusieurs essais, ce fut peu fructueux et cette élément est peu détaillé je trouve.

    Merci
    Ben écoute moi j'ai encore jamais utilisé ça... mais en regardant un peu dans le code qui est donnée dans la FAQ pour la solution 3, tu peux voir que la contrainte des caratères est passez dans le contructeur de la classe JFormattedTextField... c'est donc la class NumberFormat qui définit la contrainte et si tu va voir l'aide de java pour cette classe on peux voir qu'il y a ces 3 classes que tu peux utilisés pour les contraintes: DateFormat, MessageFormat, NumberFormat qui hérites tout les 3 de la class Format

    DateFormat --> http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html

    MessageFormat --> http://java.sun.com/j2se/1.4.2/docs/api/java/text/MessageFormat.html

    NumberFormat --> http://java.sun.com/j2se/1.4.2/docs/api/java/text/NumberFormat.html


    Je pense que si tu regardes ces 3 classes avec les différentes méthode qu'elles ont tu va trouvé ton bonheur




    Citation Envoyé par BARBIER
    Ca marche mais le truc, c'est que l'affichage du champ dans mon Applet est tassé car auparavant, je faisais un new JTextField(value) avec 'value' qui empêchait que le champ ne se recroqueville sur lui-même lorsqu'il est vide !
    La c'est un problème de layout... je sais pas quel layout tu utilises et je peux donc pas vraiment te dire ...... mais essai peut etre avec la méthode setPreferredSize() pour définir la taille de ton composant



  12. #12
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    yep ca marche parfaitement ! merci beaucoup =)

  13. #13
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    [resolu] stp
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  14. #14
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Je ne vais pas mettre résolu car ça ne l'est pas : c'est Ceres02 qui a résolu le sien !

    Une fois qu'une valeur a été entrée, on ne peut plus la supprimer ou tout du moins pas le premier chiffre ! La restriction doit être telle qu'il ne veut que des chiffres mais aussi ne pas être vide ! Si quelqu'un a une idée...

Discussions similaires

  1. Absence de valeurs après modifications
    Par antoine974 dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2009, 14h30
  2. [JTextField] Verifier la valeur saisie
    Par d_hazem dans le forum Composants
    Réponses: 4
    Dernier message: 26/08/2008, 11h50
  3. JTextField limité à certaines valeurs
    Par demonia dans le forum Composants
    Réponses: 5
    Dernier message: 21/12/2007, 19h01
  4. Réponses: 3
    Dernier message: 11/01/2007, 17h52
  5. Problème de SUM sur une absence de valeur
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/01/2007, 23h33

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