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

 Java Discussion :

Comment fonctionnent les JButton et leurs ActionListener


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut Comment fonctionnent les JButton et leurs ActionListener
    Bonjour tout le monde.

    J'ai du mal à comprendre le résultat de ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    widgetSouth.test().addButton("ADD", 100, 30, this.getActionListener());
    window.displayCenter(widget).displaySouth(widgetSouth).setVisibleTrue();
    widgetSouth hérite de JPanel et window de JFrame.
    La fonction test exécute un simple syso qui affiche "zvzevzevrzv".
    Le addButton ça add un button... et le displayCenter ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getContentPane().add(panel, BorderLayout.CENTER);
    et du coup le displaySouth c'est pareil mais pour le south quoi...

    Ma question c'est pourquoi l'ActionListener s'exécute avant le syso?
    Et surtout comment faire autrement parce que j'aimerai bien que test intervienne sur les objets que l'ActionListener va utiliser.
    Mais avant qu'il ne les utilisent parce que après c'est trop tard et c'est bien dommage.

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par Pecose Voir le message
    Ma question c'est pourquoi l'ActionListener s'exécute avant le syso?
    Cela ne veut rien dire. Mais si tu parles de l'exécution de la méthode actionPerformed d'une instance qui serait retournée par this.getActionListener(), c'est difficile à dire sans le code qui a derrière toutes ces méthodes que tu montres. Et qu'est ce qui te permet d'affirmer qu'il "serait exécuté" avant le "syso" (je suppose que tu parles de celui qui serait exécuté par test()) ?

    D'ailleurs,
    Citation Envoyé par Pecose Voir le message
    J'ai du mal à comprendre le résultat de ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    widgetSouth.test().addButton("ADD", 100, 30, this.getActionListener());
    window.displayCenter(widget).displaySouth(widgetSouth).setVisibleTrue();
    Seul le code ou la doc (si elle est conforme au code) de toutes ces méthodes (qui me semblent absurdes par ailleurs (setVisibleTrue()... non mais allo quoi ?)), difficile à dire.

    Citation Envoyé par Pecose Voir le message
    Et surtout comment faire autrement parce que j'aimerai bien que test intervienne sur les objets que l'ActionListener va utiliser.
    "va utiliser" ? Quel sens donnes-tu à cette expression ? Tu parles d'une sélection (provenant d'un composant pouvant en procurer) par exemple qui pourrait être utilisée (dans la méthode actionPerformed) ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Cela ne veut rien dire. Mais si tu parles de l'exécution de la méthode actionPerformed d'une instance qui serait retournée par this.getActionListener(), c'est difficile à dire sans le code qui a derrière toutes ces méthodes que tu montres. Et qu'est ce qui te permet d'affirmer qu'il "serait exécuté" avant le "syso" (je suppose que tu parles de celui qui serait exécuté par test()) ?
    Voila t'as tout compris... Tu vois que je suis clair.

    Citation Envoyé par joel.drigo Voir le message
    Seul le code ou la doc (si elle est conforme au code) de toutes ces méthodes (qui me semblent absurdes par ailleurs (setVisibleTrue()... non mais allo quoi ?)), difficile à dire.
    Énorme! C'est vrai faut vraiment être un âne pour pondre un méthode pareil! Wait!!!

    Pour répondre à ta question "Et qu'est ce qui te permet d'affirmer qu'il "serait exécuté" avant le "syso"", si je met un syso dans l'actionPerformed et un autre dans test (le fameux) et bien il se passe une chose prévisible, de manière tout à fait absolu et incontestable mais non négligemment regrettable. Comme il était indiqué plus haut, nous pouvions nous y attendre... Enfin voila je pence que c'est maintenant clair pour tout le monde sauf pour moi.

    Citation Envoyé par Pecose Voir le message
    La fonction test exécute un simple syso qui affiche "zvzevzevrzv".
    Du coup voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("zvzevzevrzv");
    Citation Envoyé par Pecose Voir le message
    Le addButton ça add un button...
    Du coup voila aussi le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Widget addButton(String contenu, int w, int h, ActionListener a){
    	JButton okBouton = new JButton(contenu);
            okBouton.setPreferredSize(new Dimension(w, h));
            okBouton.addActionListener(a);
            this.add(okBouton);
            return this;
    }
    Citation Envoyé par Pecose Voir le message
    et le displayCenter ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getContentPane().add(panel, BorderLayout.CENTER);
    et du coup le displaySouth c'est pareil mais pour le south quoi...
    Du coup pour finir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Window displaySouth(JPanel panel){
    	this.getContentPane().add(panel, BorderLayout.SOUTH);
    	return this;
    }
    J'ai tellement aimer que j'ai mis un pouce vert!

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Pecose Voir le message
    Voila t'as tout compris... Tu vois que je suis clair.
    Oui et non : il faut faire des suppositions et des conjectures pour comprendre. L'expérience et le choix de l'explication la plus évidente va nous conduire à une déduction peut-être fausse. Donc peut-être clair pour toi, mais pour moi, si je dois faire des suppositions, je ne peux pas être sûr que je ne me trompe pas. Et donc que la réponse est inadaptée donc inutile.

    Citation Envoyé par Pecose Voir le message
    Pour répondre à ta question "Et qu'est ce qui te permet d'affirmer qu'il "serait exécuté" avant le "syso"", si je met un syso dans l'actionPerformed et un autre dans test (le fameux) et bien il se passe une chose prévisible, de manière tout à fait absolu et incontestable mais non négligemment regrettable. Comme il était indiqué plus haut, nous pouvions nous y attendre... Enfin voila je pence que c'est maintenant clair pour tout le monde sauf pour moi.
    Bah, non, ce n'est pas clair. Parce qu'on ne sait pas vraiment ce qu'il se passe. Pourquoi ne pas indiquer explicitement le code exécuté et son résultat, plutôt que de parler de choses prévisibles, etc ?
    En plus, ce que tu dis dans ce paragraphe semble contredire ce que tu disais dans ta première question (c'est-à-dire que le "syso" de actionPerformed s'afficherait avant celui de "test".). Tu parles de mettre un "syso" dans "actionPerformed" : cette méthode ne s'exécute que lorsqu'on déclenche l'action ou qu'on exécute explicitement la méthode. Il n'y a donc normalement aucune corrélation entre l'affectation de l'écouteur au bouton, faite après l'appel la méthode test(), et l'ordre des 2 "syso", d'autant plus que ça pourrait être exécuté dans des threads différents. Normalement, la seule chose prévisible, avec les bribes de code que tu donnes, est que le "syso" dans "actionPerformed" devrait être exécuté après celui dans "test", bien après, voire jamais (il y a plein de façons d'expliquer un autre comportement, c'est pourquoi un code complet permettrait d'expliquer la vraie raison et non des centaines d'hypothèses inutiles).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    J'ai trouvé!
    Pas le pourquoi mais le comment.
    Mais c'est pas grave du moment que ça marche.
    Merci Joel de ton aide.

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

Discussions similaires

  1. Comment fonctionne les versions d'un logiciel?
    Par Antigonos Ier Gonatas dans le forum Windows
    Réponses: 12
    Dernier message: 14/07/2006, 18h48
  2. [VB6] Comment fonctionne les Tableaux ?
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 27/04/2006, 14h59
  3. [FLASH 8] Comment fonctionne les clips
    Par steeves5 dans le forum Flash
    Réponses: 3
    Dernier message: 27/01/2006, 10h23
  4. Comment fonctionnent les index des options d'un select ?
    Par pekka77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/10/2005, 18h05
  5. Réponses: 4
    Dernier message: 13/12/2004, 20h37

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