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 :

JFormattedTextField et écouteur


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 296
    Par défaut JFormattedTextField et écouteur
    Bonsoir

    Je ne comprend pas que quand je saisi un chiffre dans mon JFormattedTextfield contenu est égale à un champ vide de la taille des dièses
    Je ne comprend pas pourquoi je ne récupère pas mon contenu


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          MaskFormatter mask = new MaskFormatter("#############");
    		      final JFormattedTextField textnum = new JFormattedTextField(mask);
    		      textnum.addActionListener(new java.awt.event.ActionListener() {
    					public void actionPerformed(java.awt.event.ActionEvent e) {
    						 contenu = textnum.getText(); 
    						 System.out.println(contenu);
    					}
    				});

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Cela doit etre car tu declare ton JFormattedTextField en final et donc qu'il ne peut pas changer.

    Chez moi ca ca marche (attention j'ai mis KeyListener à la place De ActionLIstener dans mon cas, à toi de modifier si tu le souhaites):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    MaskFormatter mask = new MaskFormatter("#############");
    JFormattedTextField textnum = new JFormattedTextField(mask);
    textnum.addKeyListener(new java.awt.event.KeyListener() {
    	public void keyPressed(KeyEvent e) {}
     
    	public void keyReleased(KeyEvent e) {
    		String contenu = (JFormattedTextField)e.getSource()).getText(); 
    		System.out.println("contenu1 :"+contenu+":");
    	}
     
    	public void keyTyped(KeyEvent e) {}
     
    });
    Bonne soirée

  3. #3
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par maxf1
    Cela doit etre car tu declare ton JFormattedTextField en final et donc qu'il ne peut pas changer.
    Faux, ça n'a rien à voir. Un objet en final indique juste qu'on ne peut pas l'instancier à nouveau. En gros tu ne peux pas faire un autre textnum = [...] sur cet objet. Par contre, tu peux manipuler tout ce qu'il encapsule : texte, couleurs, etc.
    De +, le final est ici obligatoire car textnum est utilisé dans une classe anonyme et n'est pas attribut d'instance.

    Citation Envoyé par maxf1
    Chez moi ca ca marche (attention j'ai mis KeyListener à la place De ActionLIstener dans mon cas, à toi de modifier si tu le souhaites)
    Oui, KeyListener c'est nettement mieux que ActionListener ! Tu peux aussi utiliser un DocumentListener, ça marche encore mieux qu'un KeyListener.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 296
    Par défaut
    Alors ca viendrait d'un mauvais choix d'écouteur ? parce que j'aurais bien voulu
    laisser celui que j'avais

  5. #5
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Citation Envoyé par schniouf
    Oui, KeyListener c'est nettement mieux que ActionListener ! Tu peux aussi utiliser un DocumentListener, ça marche encore mieux qu'un KeyListener.
    J'aimerais bien savoir pourquoi l'utilisation du DocumentListener est meilleure qu'un KeyListener ??

    C'était une question que je ne m'étais jamais posé mais j'aimerais connaître la raison de ce choix

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Pour un JFormattedTextField, j'utilise plutot un PropertyChangeListener sur la propriete "value".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import java.beans.*;
     
    field.addPropertyChangeListener("value", aPropertyChangeListener);
    ...
     
    public void propertyChange(PropertyChangeEvent event) {
      System.out.println("contenu1 :"+field.getValue()+":");
      // Si le champs est suppose contenir un formatteur de nombres entiers :
      // int value = ((Number)field.getValue()).intValue();
    }
    le changement de propriete n'est bien sur leve que si le texte saisi dans le champs passe correctement dans le formatteur et si le champs perd le focus (bref que la saisie est validee quand on clique ailleurs ou ferme la boite de dialogue).

    Si tu veux etre notifie "en direct" des mauvaises saisies (pour, par exemple, changer la couleur du texte en rouge ou afficher un avertissement), mieux vaut voir du cote du DocumentListener et du KeyListener.

    Pourquoi le DocumentListener plutot que le KeyListener ? Car on peut egalement faire une restriction des caracteres acceptes dans le Document meme (avec un Document customise) et donc taper tout un tas de touches non-valides au clavier sans que ca mette pour auttant en danger l'integrite du document (c'est lui qui decide ce qu'il accepte ou pas). On ne recevra des DocumentEvent que quand le Document est reellement modifie (et donc qu'il a accepte les caracteres) : donc le filtrage est plus fin et plus correct en se placant en bout de chaine, il ne sert (en general) a rien d'effectuer un filtrage manuellement alors que le Document ou le Formater peut le faire pour nous.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    D'accord merci pour l'explication, très claire et précise

    C'est vrai qu'améliorer le filtrage est très intéressant mais honnetement il y a tellement de façons de gérer ça qu'on passe souvent à côté de bonnes solutions comme la tienne ou celle de schniouf.

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Tout a fait d'accord.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par bouye
    Pourquoi le DocumentListener plutot que le KeyListener ? Car on peut egalement faire une restriction des caracteres acceptes dans le Document meme (avec un Document customise) et donc taper tout un tas de touches non-valides au clavier sans que ca mette pour auttant en danger l'integrite du document (c'est lui qui decide ce qu'il accepte ou pas). On ne recevra des DocumentEvent que quand le Document est reellement modifie (et donc qu'il a accepte les caracteres) : donc le filtrage est plus fin et plus correct en se placant en bout de chaine, il ne sert (en general) a rien d'effectuer un filtrage manuellement alors que le Document ou le Formater peut le faire pour nous.
    Je pensais aussi au fait que si l'utilisateur remplis le textfield en faisant clic droit -> coller (en supposant de développer le mécanisme du clipboard) alors le KeyListener ne capte aucun évènement, je me trompe ?

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Probablement, quoi que je n'ai jamais teste la chose (puisque n'utilisant jamais un KeyListener pour faire ce genre de restrictions).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 296
    Par défaut
    Ce qui est bizarre c'est qu'avec un écouteur classique comme ca
    je n'arrive jamais a capter d'évènement mon system.out ne m'affichant rien
    alors que normalement a moment donné il devrait bien capté un évènement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	MaskFormatter mask = new MaskFormatter("#############");
    		final JFormattedTextField textnum = new JFormattedTextField(mask);
    		textnum.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				value = ((Number)textnum.getValue()).intValue();
    				System.out.println("rentre dans l'écouteur");
    			}
    		});
    Excusez moi de pas avoir trop essayer les autres types d'écouteurs mais j'ai du mal avec

Discussions similaires

  1. [JFormattedTextfield] Insérer du texte
    Par stailer dans le forum Composants
    Réponses: 6
    Dernier message: 09/08/2005, 11h55
  2. [JMenuBar] Problème d'écouteurs
    Par Reward dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 17/09/2004, 11h22
  3. [FLASH MX2004] TextInput et écouteur
    Par dens63 dans le forum Flash
    Réponses: 2
    Dernier message: 25/08/2004, 14h43
  4. [JFormattedTextField]selectAll
    Par harold63 dans le forum Composants
    Réponses: 4
    Dernier message: 21/07/2004, 10h55
  5. [JFormattedTextField]Format spécial
    Par eraim dans le forum Composants
    Réponses: 13
    Dernier message: 22/04/2004, 10h20

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