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 :

[JoptionPane] Problème à la saisie


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut [JoptionPane] Problème à la saisie
    Voila, j'utilise une JoptionPane.showInputDialog pour que l'utilisateur saisisse la largeur de la grille qu'il veut utiliser. Et j'essaye d'empêcher toute saisie problématique. Sauf que çe ne se passe pas comme prévu.
    Voici le code:
    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
     
    public void créerGrilleAléatoirement() {
     
    	boolean saisiecorrecte=false;
     
    		/*
    		 * Saisie de la largeur de la grille
    		 */
    		String largeurgrille = JOptionPane.showInputDialog(this, "Entrer une largeur de grille comprise entre 3 et 15 ");
    		while(saisiecorrecte==false){
    			for(int i=0;i<largeurgrille.length();i++){
    				if(largeurgrille=="" || largeurgrille.charAt(i)<48 || largeurgrille.charAt(i)>57){
    					JOptionPane.showMessageDialog(this, "La largeur que vous avez saisie est invalide, veuillez effectuer une nouvelle saisie.",
    						      "avertissement",
    						      JOptionPane.WARNING_MESSAGE);
    					largeurgrille = JOptionPane.showInputDialog(this, "Entrer une largeur de grille comprise entre 3 et 15 ");
    				}
    				else i++;
    			}
     
    			if(Integer.parseInt(largeurgrille)<3 || Integer.parseInt(largeurgrille)>15){//ici sort une NumberFormatException 
    				JOptionPane.showMessageDialog(this, "La largeur que vous avez saisie est invalide, veuillez entrer une largeur comprise entre 3 et 15",
    					      "avertissement",
    					      JOptionPane.WARNING_MESSAGE);
    				largeurgrille = JOptionPane.showInputDialog(this, "Entrer une largeur de grille comprise entre 3 et 15 ");
    			}
    			else {
    				saisiecorrecte=true;
    			}
    		}
     
    		saisiecorrecte=false;
    }
    Je fais le test, en saisissant des nombres corrects, aucun problème.
    Si je saisis un caractère (autre qu'un espace) suivi de n'importe quoi, aucun problème, l'utilisateur doit refaire une saisie.
    Si je saisis un chiffre suivi d'un espace, j'ai une Exception qui sort.
    Si je saisis un espace suivi de n'importe quoi, j'ai une Exception qui sort.
    Et enfin, si je saisis un chiffre suivi d'un caractère quelconque, j'ai une Exception qui sort.

    Je ne comprends pas pourquoi ce comportement. Normalement, avec mon for et les charAt(i), je vérifie bien que les caractères saisis sont bien uniquement des chiffres, si ce n'est pas le cas, je redemande une saisie, sinon, je passe au caractère suivant. Enfin, ça c'est ce que je veux...
    Une idée?

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    haha tu te compliques la vie. Tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public int getLargeur() {
    try {
         int largeur = Integer.parseInt(JOptionPane.showInputDialog(this, "Entrer une largeur de grille comprise entre 3 et 15 "));
         if(largeur < 15 && largeur > 3) {
            //traitement
         }else {
            //traitement de l'erreur
         }
    }catch(NumberFormatException e) {
         JOptionPane.showMessageDialog(this, "La largeur que vous avez saisie est invalide, veuillez effectuer une nouvelle saisie.",
    						      "avertissement",
    						      JOptionPane.WARNING_MESSAGE);
         return getLargeur();
    }
    Voilà en (très) gros. Bonne chance.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    ça marche. c'est parfait, et tellement plus simple... Merci !
    Par contre, petit truc désagréable, c'est que si je décide de ne pas saisir de valeur, càd si je change d'avis et que je quitte sur annuler, il me répète "saisie invalide, veuillez recommencer" indéfiniment.
    On ne peut pas programmer le bouton "annuler" pour vraiment annuler l'action?

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Et bien si, lorsque tu fais annuler, la valeur retourner est une chaine de caractère nulle (soit String machaine = ""). Donc tu peux faire un test du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String chaine = JOptionPane.showInputDialog(this, "Entrer une largeur de grille comprise entre 3 et 15 ");
    if(!chaine.equals("")) {
    int largeur = Integer.parseInt(chaine);
         if(largeur < 15 && largeur > 3) {
            //traitement
         }else {
            //traitement de l'erreur
         }
    }else {
       //l'utilisateur a choisi d'annuler.
       return 0;
    }
    Je ne suis pas sur mais je pense que c'est bon.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    en fait, renvoyer 0 ne m'arrange pas, parce que la valeur renvoyée est envoyé pour appeler un constructeur, et si je lui passe 0, ça va poser bcp de problèmes.
    En fait, ce que je cherche comme action, c'est que le bouton annuler génère une action semblable au frame.dispose();

    EDIT : même en rajoutant un JOptionPane.CANCEL_OPTION, je ne récupère pas la main dans mon programme.
    EDIT 2 : maintenant, il y a une valeur pré-inscrite dans le champ de saisie ! comment cela se fait-il? et comment la supprimer?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    c'est résolu, j'ai bien utilisé l'algo que tu décrivais, ça marche, le return 0 agît comme je l'entends.
    Par contre, j'ai toujours cette valeur 2 qui d'office inscrite dans le champ de saisie, et ce même d'une exécution sur l'autre, elle est toujours inscrite, et toujours la même. C'est la première fois que je vois ça !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    C'est bon, j'ai trouvé ce qu'était ce 2 qui s'affichait tt le temps. Comme j'ai rajouté en option un JOptionPane.CANCEL_OPTION, bah ce 2 correspondrait a priori à la valeur entière de cette option, et je l'avais insérée dans un champ destiné à la définition d'une valeur initiale.
    Topic résolu. Merci pour ton aide, Janitrix.

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

Discussions similaires

  1. [TMaskEdit] Problème de saisie de date
    Par Pill_S dans le forum Delphi
    Réponses: 4
    Dernier message: 10/07/2006, 16h36
  2. Richeditctrl - problème de saisie clavier
    Par KO-Tek dans le forum MFC
    Réponses: 5
    Dernier message: 20/12/2005, 11h15
  3. Problème de saisie de caractères
    Par XantaX dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/12/2005, 15h37
  4. [JOptionPane] Problème avec une boite de sauvegarde
    Par lanfeustdetroll dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 03/08/2005, 17h33
  5. Problème de saisie avec le "."
    Par Pouf dans le forum ASP
    Réponses: 10
    Dernier message: 18/03/2005, 15h27

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