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] ActionPerformed déclanché sans appuyer sur ENTREE


Sujet :

Composants Java

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut [JTextField] ActionPerformed déclanché sans appuyer sur ENTREE
    Bonjour,

    J'ai donc un JTextField et je souhaiterai pouvoir gérer les saisies dans celui-ci sans être obligé d'appuyer sur ENTER.

    En gros je voudrais que ActionPerformed soit déclanché dès qu'il y a une saisie dans ce JTextField...

    Merci de votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Salut,

    Ben soit si tu veux tu peux écouter lorsque l'utilisateur tape une touche (avec un CaretListener) soit lorsque l'utilisateur termine la saisie avec une perte du focus du textfield (avec un FocusListener).

    Voilà, sinon exprime mieux tes besoins, a+

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Merci beaucoup, le caretEvent est exactement ce que je cherchais!
    Seulement... J'ai une exception qui est levée lorsque que j'utilise setText("");
    Mon appli tourne toujours... mais je ne trouve pas comment empêcher cette exception.

    Merci d'avance.

    PS: Je trouvais ma demande assez claire pourtant, gérer l'événement d'un JTextField sans appuyer sur entrée...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Salut,

    Ton exception doit venir de ce que tu fais lorsque un CaretEvent est levé, dans ton listener vérifie au début que le text soit différent de "".

    voila a+

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Oui bien sûr.... c'est d'ailleurs LA condition pour mes traitements...
    En gros je regarde si la saisie est vide, si ce n'est pas le cas, je regarde si il s'agit d'un nombre.
    dans le cas contraire, j'affiche une boite de dialogue et je remet le champs de texte à "". Et c'est là qu'il y a une exception...

    Mon 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
     
     
     public void caretUpdate(CaretEvent e) {
     
            if (e.getSource() == jtf_nbre_devis) {
     
                if (function.isValidNumber(jtf_nbre_devis.getText())) {
                    String str = jtf_nbre_devis.getText();
                    if (!str.equals("")) {
     
                        jb_annuler_devis.setEnabled(true);
                        jb_ajouter_devis.setEnabled(true);
     
                    }
     
                    else {
                        jb_annuler_devis.setEnabled(false);
                        jb_ajouter_devis.setEnabled(false);
                    }
                }
     
                else {
                    JOptionPane.showMessageDialog(null,
                                                  "Erreur de saisie.\n Lettre détectée à la place d'un nombre",
                                                  "ATTENTION",
                                                  JOptionPane.WARNING_MESSAGE);
                    jb_annuler_devis.setEnabled(false);
                    jb_ajouter_devis.setEnabled(false);
                    jtf_nbre_devis.setText("");//Là l'exception est levée...
                }
            }
        }

  6. #6
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Il est 1 million de fois sur 10 incorrect de modifier la source d'un événement dans le traitement de cet événement.

    Ici, l'événement vient du curseur ; en faisant setText, tu vas modifier la position de ce curseur. Au mieux (trompeur) cela va redéclencher un appel au même traitement, et, avec un peu de chance, cela se passera juste. Au pire (ce qui est mieux), ça va tout péter tout de suite.

    Le mieux est de trouver un autre design de ton logiciel.

    Si tu ne peux pas, ou ne veut pas, la meilleure façon de procéder est de placer le traitement sur la queue du dispatching thread swing. De cette façon, le traitement de l'événement va se terminer sans modifier son origine, puis, seulement, le dispatching thread lancera le traitement de modification.

    Sais pas si je suis clair... En tous les cas en code java ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    jb_annuler_devis.setEnabled(false);
    jb_ajouter_devis.setEnabled(false);
    EventQueue.invokeLateur(new java.lang.Runnable()
     public void run()
     {
      jtf_nbre_devis.setText("");
     });
    (et fait gaffe que cela déclenchera tout de même un nouveau caretUpdate).

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Je ne connaissais pas ceci... je vais me renseigner là-dessus!

    Sinon je sais bien qu'il ne faut pas changer l'état d'un composant à l'intérieur d'une méthode qui gère ses événements... Mais ma condition sur le test de la valeur me semblait avisée...

    En tout cas merci pour tout! Je vais voir çà tout de suite.

  8. #8
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Points : 308
    Points
    308
    Par défaut
    Salut et pourquoi tu utilise pas un JFormattedTextField pour verifier que l'entrée de l'utilisateur est correct ???

    Cela t'eviterai le traitement evenementiel qui permet de vérifier le type d'entrée...

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    En fait... je ne suis pas adepte de messages d'erreurs à tout va dans les appli...
    Bien que ma formatrice si!
    Et en fait, lorsqu'une saisie est faite dans ce JTextField, deux boutons deviennent cliquable... Mais si rien n'est dedans ou si une lettre c'est glissé dans ce champs... les boutons redeviennent non cliquable!

    Sinon la méthode Caret fonctionne très bien!
    Problème résolu.

    Encore merci à tous!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/07/2008, 20h50
  2. Saisie au clavier sans appuyer sur Entrée
    Par Invité dans le forum Général Python
    Réponses: 1
    Dernier message: 14/05/2008, 15h23
  3. Afficher un résultat sans appuyer sur la touche (Variable Php -> HTML -> Javascript)
    Par nafix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/01/2008, 21h34
  4. lire des entiers sans appuier sur entree
    Par zied.ellouze dans le forum C
    Réponses: 5
    Dernier message: 30/04/2006, 13h00
  5. Réponses: 9
    Dernier message: 10/11/2005, 23h31

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