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 :

[JButton] comportement bizarre au clic


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut [JButton] comportement bizarre au clic
    Bonjour,
    dans un cadre scolaire, nous devons réaliser une application de type picasa. J'ai une barre outil avec des JButton, représenté simplement par une image. Lorsque je clique sur ces bouttons, le comportement est un peu bizzard, la méthode ActionPerformed est parfois appelé, parfois non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            JButton parent = new JButton();
            parent.setIcon(new ImageIcon("parent.png"));
            parent.addActionListener(new ActionListener() {
     
                @Override
                public void actionPerformed(ActionEvent e) {
     
    System.out.println("Coucou");
                }
            });
    J'ai pensé qu'il y avait un problème de focus alors j'ai tenté avec :
    parent.setFocusable(true); et un MouseAdapter qui au passage de la souris
    fait un parent.requestFocus();

    Quelqu'un sait d'ou vient le probleme et comment y remédier ?
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ca n'a rien à voir avec le focus.
    Si tu développes sous eclipse et que tu contrôles l'appel des boutons via le message System.out, il faut noter que la console n'affiche pas toujours en temps réel les messages de log.

    Il n'y a absolument aucune raison qu'un clic sur un JButton n'appelle pas l'action listener associé. Sinon c'est que tu as peut-être des listeners souris mal placés qui capturent l'évènement avant.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut
    Enfaite le print servait juste ensuite de test à un exemple plus simple, le vrai code est:

    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
    public class ControleurGetPere implements ActionListener {
     
            private VignettesListModel model;
     
     
            public ControleurGetPere(VignettesListModel model){
     
                this.model=model;
     
            }
     
        public void actionPerformed(ActionEvent e) {
     
     
            Dossier modelA=(Dossier)model.getModelAdapte();
     
            if(modelA!=null && modelA.getPere()!=null){
     
                model.setModelAdapte((Dossier)modelA.getPere());
            }
     
        }
     
     
    }

    Mais le meme code utilisé avec une action sur un JMenuItem marche super bien.

    J'ai également un autre bouton sur cette barre d'outil qui lance la diaporama,
    meme problème, la diaporama se lance parfois, et parfois rien

    Il doit bien avoir une explication

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Difficile à dire.

    A part que la condition if(modelA!=null && modelA.getPere()!=null) n'est pas toujours vérifiée.

    Tu devrais coder un else pour tester genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(modelA!=null && modelA.getPere()!=null){
        model.setModelAdapte((Dossier)modelA.getPere());
    } else {
        JOptionPane.showMessageDialog(evt.getSource(), "oups");
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut
    Ben justement si je met un message avant le if ca ne l'affiche que de temps en temps, c'est pour ca que j'ai reduit a "coucou" pour tester

  6. #6
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Désolé mais ça va être difficile de t'aider là, ton problème est sûrement situé ailleurs ou alors tu utilises une JVM non-Sun (mais elle serait bien naze de planter là-dessus) ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut
    Non j'utilise celle de sun. Bon ben je sais pas, je fais tout ce qui a de plus bete, un new JButton, et un addActionListener. La meme chose avec un JMenuItem marche, incompréhensible
    Merci de votre aide en tout cas

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 73
    Par défaut
    Bonjour Judas54,

    Citation Envoyé par judas54 Voir le message
    Non j'utilise celle de sun. Bon ben je sais pas, je fais tout ce qui a de plus bete, un new JButton, et un addActionListener. La meme chose avec un JMenuItem marche, incompréhensible
    Merci de votre aide en tout cas
    Pourquoi veux utiliser une JButton a la place d'un JMenuItem ?

    A+

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut
    C'est une barre d'outil avec les boutons qui permet de naviguer dans une arborescence de type windows: remonter, précedents, suvants

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par défaut
    Bonjour,

    Quand tu cliques, regarde si tu clique sur le dessin de l'icône ou sur le bouton.
    Vu ton code, tu ajoute le listener sur le bouton donc quand tu cliques sur l'icone, c'est normal que tu ne recoive aucun événement.

    Cdlt

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Salut!
    Pour un JButton, j'utilise plutôt un mouseListener avec par la suite la méthode suivante de l'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void mouseClicked(MouseEvent e){}
    Je ne sais pas si cela peut t'aider mais on sait jamais. A+

  12. #12
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par womannosky Voir le message
    Pour un JButton, j'utilise plutôt un mouseListener
    Il faut utiliser un ActionListener ou une Action ! C'est bien mieux qu'un mouse listener !
    Comment tu fais si l'utilisateur veux/peux pas utiliser de souris ??? Il est coincé ! Alors qu'avec l'action il peut activer le bouton via la barre espace par exemple à partir du moment où il a le focus.

    En résumé : MouseListener sur JButton = Très mauvaise idée

    Désolé.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Je suis d'accord avec toi mais en attendant, qui n'a pas de souris avec son ordinateur de nos jours ?

  14. #14
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par womannosky Voir le message
    Je suis d'accord avec toi mais en attendant, qui n'a pas de souris avec son ordinateur de nos jours ?
    Certains handicapés au hasard.
    Si monsieur (ou madame) est bien portant(e), tant mieux, mais il a beaucoup de personnes qui ne peuvent malheureusement pas se servir d'une souris.

    Et accessoirement il y a également beaucoup de personnes qui ne veulent pas se servir d'une souris pour cliquer sur un bouton lorsqu'un tab/tab/espace permet de faire plus vite.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Je crois que tu as mal lu l'énoncé du démandeur de discussion.
    Il développe une appli dans un cadre scolaire
    A+

  16. #16
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par womannosky Voir le message
    Il développe une appli dans un cadre scolaire
    Et ?
    Peu importe. Il faut prendre les bonnes habitudes le plus tôt possible.
    On n'est pas là pour faire de la bidouille, scolaire ou pas.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut
    Rebonjour,

    Avant tout merci a tous pour votre aide. Je viens de trouver quel etait le problème. Mon binome avait fait un "requestfocus" dans une classe qui extend
    ListCellRender, etant donné que sa méthode principale est appelé 20X a la seconde par java, cette derniere piqué souvent le focus de mes boutons.

    Voila

  18. #18
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Hep les cocos, une autre raison pour laquelle il ne faut pas utiliser un MouseListener sur un bouton mais travailler proprement :

    http://www.developpez.net/forums/sho...d.php?t=482811

    Si vous n'aimez pas les personnes à handicap cette raison devrait vous paraitre meilleure...

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

Discussions similaires

  1. Comportement bizarre de mes FPS
    Par Ekinoks dans le forum OpenGL
    Réponses: 7
    Dernier message: 22/08/2005, 16h14
  2. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 14h56
  3. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 11h44
  4. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 16h25
  5. [Sybase] Comportement bizarre d'une table
    Par sdozias dans le forum Sybase
    Réponses: 4
    Dernier message: 03/02/2004, 11h39

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