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 :

la taille de JFormattedTextField


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut la taille de JFormattedTextField
    bonsoir
    j'ai problème avec le champ JFormattedTextField par exemple si je clic sur le bouton sans saisir un chiffre alors le teste22.length() me retourne 0
    mais si je tape un chiffre alors teste22.length() me retourne teste = 20

    toujours numéro 20 et pas la langueur de champ je n'arrive pas à comprendre le problème



    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
     
     jButton.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
     String teste22 = jtf2.getText();
    System.out.println("test  " +teste22.length());
    	 if (jtf2.getText().length()< 6 )
    						  {
     
    JOptionPane ddd1 = new JOptionPane();ddd1.showMessageDialog(test.this, " 99","e",JOptionPane.INFORMATION_MESSAGE);	               	 
     
    }
    }
    }
     
     
     
    private JFormattedTextField  getJTextField3() {
    	if (jtf2 == null) {
    		MaskFormatter mask = new MaskFormatter();
    		jtf2 = new JFormattedTextField(mask);
    		jtf2.setBounds(new Rectangle(169, 38, 146, 37));
    		jtf2.setText("");
     
     
    		    try {
     
    		    	mask.setMask("####################");
    		        mask.setValidCharacters("1234567890");
    		    } catch (Exception e) {
    		        e.printStackTrace();
    		    }
    		    mask.setAllowsInvalid(false);
     
    		    jtf2.setFocusLostBehavior(JFormattedTextField.PERSIST);
    	}
    	return jtf2;
    }
     
    merci d'avance

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 097
    Par défaut Reponse
    Bonjour,

    Faites un commitEdit() sur votre JFormatedTextField avant d'invoquer getText().
    Quand à la valeur 20 qui vous est renvoyée, c'est normale. En effet, lorsque l'on utilise un MaskFormater, et que le nombre de caractère saisi par l'utilisateur est inférieur à la longueur du masque, dans votre cas, sa longueur est de 20 puisque vous avez saisi 20 fois le caractère #, alors la valeur renvoyée par getText() représente les x caractère saisie comblé de 20 - x caractères underscors. Résultat, la longueur de votre chaîne fera toujours 20 dés que vous aurez tapé quelque chose.
    Pour récupérer correctement le contenu de votre JFormatedTextField procédez plutot ainsi :

    Dans votre méthode actionPerformed, faites jtf2.getFormater().stringToValue(jtf2.getText()) après avoir fait jtf2.commitEdit().
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    bonjour
    voila ce que j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
     jtf2.commitEdit();
     }
      catch (ParseException pe) {
      }
     if (jtf2.getText().length()< 6 )
     {
     JOptionPane ddd1 = new JOptionPane();ddd1.showMessageDialog(test.this, " salut","e",JOptionPane.INFORMATION_MESSAGE);	               	 
       }
    mais ça déclanche pas if la condition si je tape un chiffre inférieur à 6

  4. #4
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 097
    Par défaut Alors peut-être...
    Essayé de modifier votre condition if comme suit pour voir :

    if (jtf2.getFormater().stringToValue(jtf2.getText()).length() < 6) {
    ....
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    ça marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {     
     if (((String) jtf2.getFormatter().stringToValue(jtf2.getText())).length() < 6) { {
     JOptionPane ddd1 = new JOptionPane();ddd1.showMessageDialog(test.this, " salut","e",JOptionPane.INFORMATION_MESSAGE);	               	 
       }
     }    }
     catch (ParseException e1) {
     }

  6. #6
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 097
    Par défaut D'accord...
    Je suppose que vous faites toujours le commitEdit avant le test. Par contre, vous dites, ça marche pas... certe mais précisez.
    Ca donne la même chose qu'avec un getText() tout simple, ça fait une erreur, ça fait pas d'erreur mais ça n'est jamais vrai ?....
    Bref, je ne maîtrise pas le JFormattedText. Apparament, ça s'appuie sur un objet Document pour gérer son contenu, je suppose que c'est pour cela que le getText() directe renvoie des valeurs déconcertantes.
    D'après la documentation que j'ai consulté pour l'occasion, j'avais cru comprendre que le commitEdit pouvait être necéssaire car certains formatter écrase la propriété autoCommit. Comme ça mange pas de pain je suppose de le faire, ça présente de ne plus se poser la question de savoir si la saisie a déja été passée dans la valeur du composant au moment ou s'exécute le code de l'évennement actionPermformed du bouton. Ensuite, j'ai cru comprendre que pour récupérer le contenu du Document contenu dans ce type de composant sans 'interpretation' des règles de formatage, il serait plus judicieux de procéder par un stringToValue du formater. Mais si ce n'est pas cela, alors je ne vois pas plus que vous. Je vais continuer de chercher...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    Citation Envoyé par pursang Voir le message
    Je suppose que vous faites toujours le commitEdit avant le test. Par contre, vous dites, ça marche pas... certe mais précisez.
    Ca donne la même chose qu'avec un getText() tout simple, ça fait une erreur, ça fait pas d'erreur mais ça n'est jamais vrai ?....
    Bref, je ne maîtrise pas le JFormattedText. Apparament, ça s'appuie sur un objet Document pour gérer son contenu, je suppose que c'est pour cela que le getText() directe renvoie des valeurs déconcertantes.
    D'après la documentation que j'ai consulté pour l'occasion, j'avais cru comprendre que le commitEdit pouvait être necéssaire car certains formatter écrase la propriété autoCommit. Comme ça mange pas de pain je suppose de le faire, ça présente de ne plus se poser la question de savoir si la saisie a déja été passée dans la valeur du composant au moment ou s'exécute le code de l'évennement actionPermformed du bouton. Ensuite, j'ai cru comprendre que pour récupérer le contenu du Document contenu dans ce type de composant sans 'interpretation' des règles de formatage, il serait plus judicieux de procéder par un stringToValue du formater. Mais si ce n'est pas cela, alors je ne vois pas plus que vous. Je vais continuer de chercher...

    si j'ai ajouté jtf2.commitEdit();

    mais ça marche pas ne déclenche pas boite de dialogue si je tape un chiffre puis sur le bouton
    la condition ne fonctionne pas

  8. #8
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 097
    Par défaut Sinon, essayez cela...
    jtf2.getFormater().valueToString(jtf2.getValue()).length()
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    Citation Envoyé par pursang Voir le message
    jtf2.getFormater().valueToString(jtf2.getValue()).length()

    toujours pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     jtf2.commitEdit();
     if (jtf2.getFormatter().valueToString(jtf2.getValue()).length()<6)   {
      JOptionPane ddd1 = new JOptionPane();ddd1.showMessageDialog(test.this, " salut","e",JOptionPane.INFORMATION_MESSAGE);	               	 
      System.out.println("voir        "+jtf2.getText());
          }
       } catch (ParseException e1) {
       }

  10. #10
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 097
    Par défaut Désolé...
    Je ne peux pas faire plus, je sèche complètement. J'espère que vous aurez plus de chance avec un autre. Je vais quand même continuer de chercher. Bon courage.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  11. #11
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    s'il s'agit de n'accepter que des chiffres, utiliser un simple JTextField et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {
             String s = "";
             if ((evt.getKeyCode() < 48) || (evt.getKeyCode() > 57)) {
                 s = jTextField1.getText();
                 s = s.substring(0,s.length()-1);
                 jTextField1.setText(s);
            }
        }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       JOptionPane.showMessageDialog(null,jTextField1.getText().length());

  12. #12
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 097
    Par défaut C'est vrai...
    Cependant, je n'en suis pas sûr mais il me semble que le keycode peut être récupéré deja dans l'évennement keyPressed. En tout cas, cela permettrai de ne pas se préoccuper de supprimer le caractère rejeté puisqu'en réagissant sur le keyPressed, ce dernier serait intercepté avant d'être affiché.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    je n'ai pas compris ce que vous avez fais , je bloque encore

  14. #14
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 097
    Par défaut Explications
    Voilà ce que propose Fraco :

    Plutot que d'utiliser un JFormatedText pour filtrer la saisie en limitant cette dernière à des chiffres, il vous donne une ébauche de code en réaction à l'évennement de relâchement d'une touche du clavier qui va tout simplement limiter la saisie à des chiffres. En clair, avec cette astuce, si la personne tape autre chose qu'un chiffre, le caractère sera aussitôt supprimé. Seuls les chiffres sont conservés.
    Le deuxième partie du code invoque une instance de JDialog pour afficher le contenu du JTextField en guise de message.
    Si ce que vous vouliez faire initialement consistait à limiter une saisie de chiffres, cette astuce est parfaitement valable, simple et éfficace.

    Quand à ce qui concerne ce que je me suis permis de préciser, c'est qu'en tentant de réagir sur l'évennement KeyPressed, donc au moment où l'on enfonce la touche, pas quand on la relâche, on pourrait éviter de supprimer le caractère puisque celui-ci, à cet instant n'a pas encore été copié dans le JTextField. Mais ça reste à vérifier.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

Discussions similaires

  1. Connaitre la taille de la RAM
    Par dway dans le forum Assembleur
    Réponses: 23
    Dernier message: 15/09/2004, 11h05
  2. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 18h39
  3. Réponses: 3
    Dernier message: 22/07/2002, 15h19
  4. taille du texte dans un viewport
    Par pitounette dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/07/2002, 13h06
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 21h06

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