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

Interfaces Graphiques en Java Discussion :

Ecouteur sur JButton qui ne fonctionne pas


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Par défaut Ecouteur sur JButton qui ne fonctionne pas
    Bonjour à tous,
    Je viens solliciter votre aide car je me casse la tête sur un problème d'écouteur depuis plusieurs jours.

    Mon application est une sorte de jeu de cartes. Elle contient un JPanel (inclus dans un JScrollPane, pour avoir une ScrollBar), qui peut contenir différents boutons représentant des cartes du jeu (qui dérivent de JButton).
    En fait, de base, le JPanel n'est pas visible et ne contient aucun bouton. Si la touche F1 est appuyée, mon application ajoute dans le JPanel les cartes du joueur 1, puis l'affiche de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (e.getKeyCode() == e.VK_F1) {
    	this.panelHand.SetCards(this.players.get(0).getHand()); // On définit les cartes du panel comme celles du joueur 1
    	this.panelHand.setVisible(true);
    	this.panelHand.paintImmediately(getBounds()); // Redessiner le panel (car c'est la méthode paintComponent du panel qui va ajouter les cartes, ce qui est nécessaire avant d'appeler GetVarButtons pour ajouter les écouteurs)
    	this.panelHand.validate();
    	this.AddActionListener(this.panelHand.GetVarButtons());
    }
    J'ajoute également des écouteurs sur chaque carte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void AddActionListener(ArrayList<JButton> _buttons) {
    	for (JButton button : _buttons) {
    		button.addActionListener(this);
    	}
    }
    Mon problème avec ce code est que lorsque je clique sur un bouton représentant une carte, rien ne se passe, comme ci je n'avais pas ajouté d'écouteur à mes boutons...
    Par exemple, lorsque je clique sur un bouton, le programme n'affiche rien, malgré ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void actionPerformed(ActionEvent e) {
    	System.out.println("Action");
    }
    Mon problème peut-il venir du fait que pour mes boutons j'ai créé une classe qui hérite de JButton, et non pas JButton directement ?

    Merci d'avance !

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Soit tu ne passes pas dans ton code pour ajouter les écouteurs, soit ta liste de bouton est vide quand tu y passes, soit dans button.addActionListener(this); this représente une classe qui a une méthode actionPerformed vide.

    Éventuellement tu réinitialises ou efface peut être les écouteurs après les avoir ajoutés.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Par défaut
    J'ai ajouté des affichages un peu partout :
    - Je passe bien dans ma méthode AddActionListener(ArrayList<JButton> _buttons)
    - Dans cette méthode, ma liste n'est pas vide, je boucle bien autant de fois que le joueur a de cartes
    - Ma classe représentée par this implémente bien la méthode actionPerformed(ActionEvent e)

    Je vais voir si mes écouteurs ne sont pas réinitialisés quelque part...

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Citation Envoyé par Morgan7469 Voir le message

    Mon problème peut-il venir du fait que pour mes boutons j'ai créé une classe qui hérite de JButton, et non pas JButton directement ?

    Merci d'avance !
    Non, cela doit fonctionner sans problème.

    Par contre, es-tu déjà certain que

    Citation Envoyé par Morgan7469 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void AddActionListener(ArrayList<JButton> _buttons) {
    	for (JButton button : _buttons) {
    		button.addActionListener(this);
    	}
    }
    est réellement éxécuté ?
    Vérification par une trace

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    D'accord avec deathness

    Une autre chose (je pense inutile mais on ne sait jamais), la classe en question (this) implémente bien ActionListener ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Par défaut
    Oui bien sûr !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Game extends JFrame implements ActionListener, KeyListener, MouseListener
    J'ai d'autres panels dans ma fenêtre, et je n'ai aucun souci avec mes écouteurs concernant les boutons de ces panels.

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Est-ce que tu affiches le bouton sur un ojbjet autre qu'un JPanel ou scrollPane ? Il arrive parfois que le bouton soit positionné sur un autre objet que ce soit cet autre objet qui reçoit l'action du clic et non le bouton

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Par défaut
    Mes boutons sont bien positionnés sur un JPanel, positionné dans un JScrollPane.
    En plus, quand je clique sur le bouton, je le vois s'enfoncer donc j'imagine que c'est bien lui qui reçoit l'action du clic...

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

Discussions similaires

  1. float sur div qui ne fonctionne pas
    Par stephane543 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 13/03/2010, 21h26
  2. [NASM] Int 21h qui ne fonctionne pas sur mon mini OS
    Par andromeda dans le forum Assembleur
    Réponses: 4
    Dernier message: 07/04/2007, 18h03
  3. Script JSP qui ne fonctionne pas sur n'importe quel poste
    Par vannary dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 18/12/2006, 11h56
  4. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h04
  5. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

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