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 et récupération de données


Sujet :

Composants Java

  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut JTextfield et récupération de données
    salut a tous


    dons ma fenêtre j'ai plusieurs JTextField dans lesquels on rentre des données et qui sont vérifier sur l'appui d'un bouton valider.

    ces textField ne doivent comporter que des chiffres j'ai donc crées la méthode suivante pour vérifier les données rentrées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public boolean verifierDonnes(){
    		if((Integer.parseInt(tf_1.getText()) > 0 )
    				&& (Integer.parseInt(tf_2.getText()) > 0)
    				&& (Integer.parseInt(tf_3.getText()) > 0)
    				&& (Integer.parseInt(tf_4.getText()) > 0)
    				&& (Integer.parseInt(tf_5.getText()) > 0)
    				&& (Integer.parseInt(tf_6.getText()) > 0)
    				&& (Integer.parseInt(tf_7.getText()) > 0)
    				)return true;
    		return false;
    	}

    mais le problème c'est que même lorsque je met que des chiffres 0 dans mes textFields je recupère quand même le booléen true et pas false comme ca devrait etre le cas



    si quelqu'un pourrait m'aider merci

  2. #2
    Membre éclairé Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Par défaut
    J'ai été confronté à ce problème...
    Je me suis fait une méthode qui vérifie le contenu de mon JTextField...

    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 static boolean isValid(String str){
            boolean bok = true;
     
                    try {
                        int nbre = Integer.parseInt(str);
                    }
                    catch (NumberFormatException ex) {
                        bok=false;
                    }           
     
           return bok;
     
        }

  3. #3
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Salut,

    ces textField ne doivent comporter que des chiffres
    Pourquoi ne pas utiliser des JFormattedTextField??? en leur spécifiant de ne prendre que des chiffres l'utilisateur ne pourra pas saisir de lettre donc t'auras pas à tester le contenu de ton textfield.
    Moins de code, moins d'erreur et plus de cheveux...

  4. #4
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    Citation Envoyé par grabriel
    Salut,



    Pourquoi ne pas utiliser des JFormattedTextField??? en leur spécifiant de ne prendre que des chiffres l'utilisateur ne pourra pas saisir de lettre donc t'auras pas à tester le contenu de ton textfield.
    Moins de code, moins d'erreur et plus de cheveux...

    je vais essayer merci merci pour le tuyau
    i
    mais à vrai dire j'ignorai l'existence de cette classe

  5. #5
    Membre éclairé Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Par défaut
    Pareillement.
    Merci grabriel!

  6. #6
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    j'ai utilise un JFormattedTextField pour que mes JTexfields acceptent que les nombres comme valeurs


    j'ai ecrit ceci :

    tf = new JFormattedTextField(NumberFormat.INTEGER_FIELD)


    mais je peut quand meme recuperer des valeurs différentes que des entiers

    mon niveau en anglais étant un peu bas je n'ai pas tout compris a la doc
    si quelqu'un pouvait me dire d'ou vient le fait ca ne marche pas et si je l'utilise de la bonne maniere


    merci d'avance

  7. #7
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Salut,

    un exemple vaux mieux qu'un long discours :

    En version longue pour un code postal 5 chiffres à la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MaskFormatter formatCP = null;
     		try {
     			formatCP = new MaskFormatter("#####");
     		} catch (java.text.ParseException exc) {
     			exc.printStackTrace();
     		}
    JFormattedTextField jftCodepostal = new JFormattedTextField(formatCP);
    [EDIT]Emplacement d'une grossière erreur personne n'a rien vu!!![/EDIT]

    Après tu peux faire le mask que tu veux mais regarde dans la FAQ ou un tuto ils en parlent surement.

  8. #8
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    j'ai adapté ton exemple a mon interface, mais un problème est survenue :

    si 'l'utilisateur rentre des lettres OK pas de problème ça s'efface automatiquement.

    mais si l'utilisateur rentre un chiffre suivit de lettre alors là rien ne se passe il accepte et ,'efface pas le champs.

    y a t'il un moyen de remédier a ce problème ??????

    merci

  9. #9
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Tu peux montrer ton code steup'lai ???

  10. #10
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    Citation Envoyé par grabriel
    Tu peux montrer ton code steup'lai ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	private JFormattedTextField ftf_ageMaxT;
    	private JFormattedTextField ftf_ageMaxV;
    	private JFormattedTextField ftf_ageMaxP;
    	private JFormattedTextField ftf_nbV;
    	private JFormattedTextField ftf_nbT;
    	private JFormattedTextField ftf_nbP;
    ...
    ...
    ...
    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
     
    ftf_nbP = new JFormattedTextField("#####");
    		ftf_nbP.setText("0");
    		ftf_nbP.setColumns(5);
    		ftf_nbP.setHorizontalAlignment(SwingConstants.LEFT);
    		panelTextField.add(ftf_nbP);
     
    		ftf_nbT = new JFormattedTextField("#####");
    		ftf_nbT.setText("0");
    		ftf_nbT.setColumns(5);
    		panelTextField.add(ftf_nbT);
     
    		ftf_nbV = new JFormattedTextField("#####");
    		ftf_nbV.setText("0");
    		ftf_nbV.setColumns(5);
    		panelTextField.add(ftf_nbV);
     
    		ftf_ageMaxP = new JFormattedTextField("#####");	
    		ftf_ageMaxP.setText("0");
    		ftf_ageMaxP.setColumns(5);
    		panelTextField.add(ftf_ageMaxP);
     
    		ftf_ageMaxV = new JFormattedTextField("#####");
    		ftf_ageMaxV.setText("0");
    		ftf_ageMaxV.setColumns(5);
    		panelTextField.add(ftf_ageMaxV);
     
    		ftf_ageMaxT = new JFormattedTextField("#####");
    		ftf_ageMaxT.setText("0");
    		ftf_ageMaxT.setColumns(5);
    		panelTextField.add(ftf_ageMaxT);

  11. #11
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    YArggghhh ouais j'ai dit n'importe quoi la version courte n'existe pas
    En faite faut que tu déclare ton mask et que tu le mette dans ton formattedtextField.... Désolé!!!

    Sinon n'hésite pas à faire des recherche si quelqu'un te propose une solution et que ca fonctionne pas, il se peux que la personne ai mal expliqué ou dit n'importe quoi (ce qui était mon cas).

  12. #12
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    Citation Envoyé par grabriel
    YArggghhh ouais j'ai dit n'importe quoi la version courte n'existe pas
    En faite faut que tu déclare ton mask et que tu le mette dans ton formattedtextField.... Désolé!!!

    pas de probleme
    tu m'a déjà bien aidé

  13. #13
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    desole mais j'ai encore un petit soucit

    je sais que je doit etre lourd a la fin mais encore desole

    n'y airait t'il pas un moyen pour autoriser de 1 à 5 chiffres par exemple

    car pour l'exemple donne je suis oblige de mettre 5 chiffres alors que dans mon application la personne doit juste rentrée un entier peut importe sa taille (bon évidement elle n'iras pas jusqu'à un trop grand nombres de chiffres chiffre)

  14. #14
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Salut kespy13

    pour résoudre ton pb, tu peux instancier un JFormattedTextField avec un NumberFormat. Ainsi, quelque soit ce qui est saisit, lorsque le composant perd le focus, la saisie n'est validée que si elle respecte le format.
    Sur ton J(Formatted)TextField, tu peux ajouter un keyListener qui va filtrer les frappes au clavier.

    Sa donne ça en 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
    JFormattedTextField  formattedTxt = new JFormattedTextField(NumberFormat
    				.getNumberInstance());
    		formattedTxt.addKeyListener(new KeyAdapter() {
     
    			/**
                             * {@inheritDoc}
                             * @see java.awt.event.KeyAdapter#keyTyped(java.awt.event.KeyEvent)
                             */
    			@Override
    			public void keyTyped(KeyEvent e) {
    				if (formattedTxt3.getText().length() < MAX_LENGHT && Character.isDigit(e.getKeyChar())) {
    					super.keyTyped(e);
    				} else {
    					Toolkit.getDefaultToolkit().beep();
    					e.consume();
    				}
    			}
     
    		});
    j'espère que ça t'aidera.

  15. #15
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Tu peux aussi utiliser un document spécialiser pour l'occasion:
    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
    class MyDocument extends PlainDocument {
     
    		/**
                     * {@inheritDoc}
                     * 
                     * @see javax.swing.text.PlainDocument#insertString(int,
                     *      java.lang.String, javax.swing.text.AttributeSet)
                     */
    		@Override
    		public void insertString(int offs, String str, AttributeSet a)
    				throws BadLocationException {
    			if (
    			// Le format que doit respecter la chaine
    			str.matches("[0-9]+") && (
    			// La longueur maximale
    					getLength() + str.length()) <= 5) {
    				super.insertString(offs, str, a);
    			} else {
    				// Toolkit.getDefaultToolkit().beep();
    			}
    		}
    	}
    Ensuite, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JTextField textField = new JTextField();
    textField.setDocument(new MyDocument());
    Pour aller plus loin, tu peux bien sûr rendre modifiable (avec des mutateurs) la longueur max ainsi que l'expression régulière.

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

Discussions similaires

  1. [JTextField] Récupération de donnée
    Par OverCat dans le forum Composants
    Réponses: 2
    Dernier message: 11/02/2006, 15h52
  2. Réponses: 2
    Dernier message: 20/02/2004, 09h47
  3. [ DB2] => [ORACLE] Récupération de données
    Par LeDid dans le forum DB2
    Réponses: 3
    Dernier message: 25/06/2003, 18h10
  4. Réponses: 13
    Dernier message: 20/03/2003, 09h11
  5. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 16h36

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