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 :

[AWT]Générer un ActionEvent par code


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Points : 96
    Points
    96
    Par défaut [AWT]Générer un ActionEvent par code
    Bonjour,

    J'ai un bouton auquel du code est associé. Dans certains cas, je voudrais que le même code soit exécuté. Je pourrais créer une méthode qui contient le code a exécuter et appeler ce code depuis actionPerformed ou depuis d'autres endroits. Une autre solution consiterait à générer par code le même événement et à le mettre dans la queue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ActionEvent evt = new ActionEvent(_courantUpdateButton, id, "");
    EventQueue evtq = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
    evtq.postEvent(evt);
    Le problème est que je ne sais pas comment récupérer l'id à mettre en paramètre du constructeur de ActionEvent. Cet id doit correspondre à un champ lors du courantUpdateButton.addActionListener(this) mais le quel ? Comment dois-je faire ?

    Merci d'avance pour votre aide

  2. #2
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    tu sais que tu peux connaitre l'emetteur de ton événement avec ev.getSource().ev pourrait étre l'ActionEvent en paramétre de ta méthode actionPerformed .

  3. #3
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Hello,

    tu peux toujours utiliser la méthode doClick de AbstractButton, même si ce n'est pas forcément très propre


  4. #4
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par Pill_S
    Hello,

    tu peux toujours utiliser la méthode doClick de AbstractButton, même si ce n'est pas forcément très propre

    il faut pas le prendre mal mais c'est vrai que ce n'est pas propre

  5. #5
    Membre régulier

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Points : 96
    Points
    96
    Par défaut
    Pill_s
    J'ai essayé ta solution et cela marche bien. En quoi n'est-ce pas propre ?


    Afrikha
    Merci pour ta réponse mais je n'ai pas du bien m'expliquer. Quand je crée mon bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    _courantUpdateButton 	= new JButton("Update");
    _courantUpdateButton.addActionListener(this);
    J'ai dans actionPerformed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    actionPerformed(ActionEvent evt)
    {
       if (evt.getSource() == _courantUpdateButton)
      { ...}
    }
    Et voilà enfin le code qui a pour but de générer l'événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActionEvent evt = new ActionEvent(_courantUpdateButton, id, "");
    EventQueue evtq = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
    evtq.postEvent(evt);
    il est indiqué dans la doc que id doit avoir une valeur bien particulière et je pense que je dois récupérer la valeur de id valué lors du AddActionListener (enfin je pense que c'est à ce moment-là qu'il est défini)
    pour être le même lors d'un click ou lors d'une création par code. Mais je me trompe peut-être complètement

  6. #6
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par willowII
    Pill_s
    J'ai essayé ta solution et cela marche bien. En quoi n'est-ce pas propre ?
    ce n'est pas propre dans le sens où on s'appuie sur des détails d'affichage pour réaliser des opérations... le jour où quelqu'un décide de supprimer le bouton, il sera obligé de modifier aussi ton code

    Mais pour des applis persos, ou si tu sais que le bouton ne sera jamais changé, le doClick est approprié.

    Les puristes n'aiment pas trop, en tout cas. Moi non plus

  7. #7
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Désolé j'avais mal compris ton problème
    as-tu essayé avec un id quelconque? si oui ça donne quoi ?

  8. #8
    Membre régulier

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Points : 96
    Points
    96
    Par défaut
    J'ai essayé un id quelconque mais cela ne fait rien.
    J'ai aussi regardé l'id de l'ActionEvent lorsque je clique sur le bouton et j'ai mis cet id là (dans mon cas 1001) lors du new ActionEvent et cela ne marche pas non plus
    Ce que je ne comprends pas non plus, c'est qu'en faisant un peek(1001) sur le EventQueue, cela me renvoie null. Donc le 1001 n'est peut-être pas le bon mais alors où trouver l'id à passer au constructeur ? ou alors faut-il mettre un id unique et faire autre chose après postEvent ?

  9. #9
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    je dois dire que cette histoire m'intrigue, surtout que c'est pas clair du tout dans la javadoc.
    Esperons qu'un spécialiste passera par là pour nous éclairer.
    Juste pour m'assurer que j'ai bien compris: tu veux envoyer un événement dans l'EDT (Event Dispath Thread ) ?

    [EDIT] une façon de procéder serait de regarder le code source de JButton, afin de voir comment il envoie ses événements .

  10. #10
    Membre régulier

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Points : 96
    Points
    96
    Par défaut
    Je ne connaissais pas l'EDT mais oui, cela y ressemble : créer un événement par code et que cet événement soit traité comme n'importe quel événement AWT (c'est à dire dans mon cas que actionPerformed soit appelé comme cela convient)

  11. #11
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Une solution consiste à mettre le code que tu veux exécuter dans la méthode run d'objet implémentant Runnable, ensuite tu mets dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SwingUtilitis.invokeLater(tonAction);
    Je pense que comme ça ,ça devrait aller.
    Plus de précisions ici

Discussions similaires

  1. [WD16] Générer du code par code, quelqu'un a déjà réussi ?
    Par DelphiManiac dans le forum WinDev
    Réponses: 14
    Dernier message: 12/03/2013, 13h01
  2. Réponses: 4
    Dernier message: 23/10/2009, 09h36
  3. [VCL] Scroller un contrôle par code
    Par sbeu dans le forum Composants VCL
    Réponses: 3
    Dernier message: 31/03/2004, 10h39
  4. Comment faire générer du rtf par mon application?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/08/2003, 09h35
  5. [VB6] Datagrid afficher ou cacher des colonnes par code
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/02/2003, 17h19

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