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 :

Appeler l'événement manuellement pour les composants SWING


Sujet :

Composants Java

  1. #1
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Appeler l'événement manuellement pour les composants SWING
    Bonjour

    je voulais appeler pour des raisons de test unitaires l'evenement FocusEvent du composant Swing JTextField , j'aurais du créer une autre classe qui extends JtextField et redefinir la méthode du component processFocusEvent ça a marché , Est ce qu'il y a pa un autre moyen pour appeler la méthode processEvent qui est une méthode de la classe Component pour la classe JComponent car l'objet testé est du type JTextField et donc je dois appeler cette méthode ProcessEvent sur ce type d'objet.


    Merci d'avantage


    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
    public class JTextField4Test extends JTextField {
     
     
     
        @Override
        protected void processEvent(AWTEvent e) {
            // TODO Auto-generated method stub
            super.processEvent(e);
        }
     
        @Override
        public boolean postEvent(Event e) {
            // TODO Auto-generated method stub
            return super.postEvent(e);
        }
     
        @Override
        protected void processFocusEvent(FocusEvent e) {
                super.processFocusEvent(e);
     
        }
     
        public void invokeFocusEvent(FocusEvent e){
            processFocusEvent(e);
        }
     
    }
    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
    JTextField4Test jtextfield=new JTextField4Test();
     
            jtextfield.addFocusListener(new FocusListener(){
     
                @Override
                public void focusGained(FocusEvent arg0) {
                    System.out.println("The event of the JTextField is invoked");
     
                }
     
                @Override
                public void focusLost(FocusEvent arg0) {
                    System.out.println("The event of the JTextField is invoked");
     
                }
     
            });
     
            FocusEvent e=new FocusEvent(jtextfield,FocusEvent.FOCUS_GAINED);
            jtextfield.invokeFocusEvent(e);

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 894
    Points : 7 197
    Points
    7 197
    Par défaut
    La plupart des composants ont des méthodes fireXXX pour simuler la gestion d'un évènements qu'ils auraient généré (ça sert également aux classes filles ;-)).

    Cependant certaines évènements sont plus liés au système qu'à un composant. C'est le cas du focus qui est géré par le FocusManager.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre réponse,

    ce que j'ai trouvé comme méthode fireXXX pour le composant JTextField est fireChangeProperty(String propertyName,boolean oldValue,Boolean newValue) , pourriez vous m'expliquer à quoi cette méthode pourra me servir supposant que je choisis de travailler avec l'événement PropertyChangeListener.


    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 894
    Points : 7 197
    Points
    7 197
    Par défaut
    fireChangeProperty ne servira qu'aux classe filles. Cette méthode est automatiquement appelé lorsqu'une des propriété du composant est modifiée.
    (Se référer aux différents setter)

    De plus, il serait incohérent d'appeler cette méthode si la valeur n'a pas changée.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : août 2004
    Messages : 8 765
    Points : 12 925
    Points
    12 925
    Par défaut
    Bah, déclencher l'acquisition du focus sur ton composant via un requestFocus...
    Ca ne suffit pas?
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    je l'ai essayé mais ça n'a pa déclenché l'événement

  7. #7
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 894
    Points : 7 197
    Points
    7 197
    Par défaut
    Est-ce que tu affiches ton IHM (même si tu ne la manipules pas manuellement) ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  8. #8
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Non , je fais des tests sur les composants de Swing sans les attaché à JFrame , donc par exemple pour le JButton j'invoque l'ActionListener en appelant la méthode jbutton.doClick() et ça déclenche l'évènement . est ce qu'il ya pas une possibilité d'invoquer les autres événements des autres composants manuellement .

  9. #9
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 894
    Points : 7 197
    Points
    7 197
    Par défaut
    Bah le composant n'étant pas rattaché à une fenêtre, je pense qu'il passe en dehors de la gestion du focus ... Essayes au moins de connecter les éléments logiquement sans afficher la fenêtre.

    Ca dépend des événements !
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  10. #10
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : août 2004
    Messages : 8 765
    Points : 12 925
    Points
    12 925
    Par défaut
    Le plus propre dans ton cas étant de mettre les composants dans une fenêtre, de placer cette fenêtre ne dehors de l'écran (genre -5000,-5000) et de faire un setVisible(true). De cette façon elle ne sera pas visible sur l'écran, mais l'intégralité des mécanismes de Swing seront activé puis que la fenêtre est totalement crée.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  11. #11
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 894
    Points : 7 197
    Points
    7 197
    Par défaut
    Possible que le requestFocus() ne fonctionne pas non plus. Je sais que ca ne marche pas si le composant est "masqué" (hiérarchie dont l'un des pères a isVisible à false).
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  12. #12
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre aide,

    j'ai essayé donc de créer une JFrame et d'ajouter le textfield à cette frame puis d'appeler requestFocus mais ça n'a pa déclenché l'évenement, jusqu'à maintenant la seule méthode qui m'a permis d'invoquer le focus c'est le fait de faire une classe qui hérite de textfield et de redéfinir la méthode processFocusEvent de la class Component

  13. #13
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par sinok Voir le message
    Le plus propre dans ton cas étant de mettre les composants dans une fenêtre, de placer cette fenêtre ne dehors de l'écran (genre -5000,-5000) et de faire un setVisible(true). De cette façon elle ne sera pas visible sur l'écran, mais l'intégralité des mécanismes de Swing seront activé puis que la fenêtre est totalement crée.
    Merci infiniment , maintenant ça marche le requestFocus() et l'évènement est déclenché , j'ai fais comme vous l'avez indiqué setVisible(true) sans me soucier du size ni du positionnement et ça a marché et la fenetre n'est pas affiché nul part , Merci infiniment à vous tous

  14. #14
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : août 2004
    Messages : 8 765
    Points : 12 925
    Points
    12 925
    Par défaut
    Pour que le système de focus fonctionne correctement, il faut qu'un setVisible soit appelé sur la JFrame. Dans ce cas le requestFocus déclenchera bien les events voulus. (cf mon post précédent).
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  15. #15
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    D'accord j'ai compris , merci bien

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

Discussions similaires

  1. Utiliser les layouts pour bien placer les composants Swing ?
    Par khaled_prg dans le forum Agents de placement/Fenêtres
    Réponses: 14
    Dernier message: 16/04/2013, 18h01
  2. Affichage instable avec les composants SWING
    Par valfajr dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 05/05/2006, 01h04
  3. HELP POUR LES COMPOSANT
    Par Bruxor dans le forum Composants VCL
    Réponses: 8
    Dernier message: 15/12/2005, 20h16
  4. [interbase] Meilleur Dataset pour les composants orientés BD
    Par plante20100 dans le forum Bases de données
    Réponses: 8
    Dernier message: 10/11/2005, 17h09
  5. Créé un nouveau répertoire pour les composant DOS
    Par Furius dans le forum Windows
    Réponses: 11
    Dernier message: 12/10/2005, 18h42

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