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 :

Problème de Boutons et d'actionListener


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème de Boutons et d'actionListener
    Bonsoir tout le monde,

    J'ai un problème dans mon programme avec des boutons : depuis que j'ai fais un tri aléatoire de mes cartes (les boutons en questions prennent le nom des cartes et les images), les boutons ne réagissent plus.

    Mon programme gère donc 24 cartes (2x12 cartes) qui doivent être tirés aléatoirement.
    Une carte est composée d'un nom et d'une image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Carte carte1 = new Carte("bari", imgBari);
            Carte carte2 = new Carte("coco", imgCoco);
            Carte carte3 = new Carte("faaa", imgFaaa);
            Carte carte4 = new Carte("duda", imgDuda);
            Carte carte5 = new Carte("elai", imgElai);
            Carte carte6 = new Carte("jojo", imgJojo);
            Carte carte7 = new Carte("aloa", imgAloa);
            Carte carte8 = new Carte("kahu", imgKahu);
            Carte carte9 = new Carte("huna", imgHuna);
            Carte carte10 = new Carte("gola", imgGola);
            Carte carte11 = new Carte("iffi", imgIffi);
            Carte carte12 = new Carte("lale", imgLale);

    J'ai donc une fonction qui prend un tableau avec les 24 cartes dans l'ordre (carte1, carte1, carte2, carte2, etc...), qui les mélanges et qui retourne un tableau de cartes mélangées :

    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
    private Carte[] melangeCartes(Carte tab[]) {
     
            int lower = 0;
            int higher = 12;
     
            Carte tableau_tous[] = new Carte[24];
     
                for(int j=0; j<=23; j++)
                {
                    int random = (int)(Math.random() * (higher-lower)) + lower;
                    System.out.println(random);
                    if(tableau_tous.length==0 || pasPresent(tableau_tous, tab[random])) // pasPresent renvoie si il y a déjà deux cartes identiques ont déjà étés mélangées et passe à la carte suivante si c'est le cas
                    {
                        tableau_tous[j] = tab[random];
                        System.out.println(tableau_tous[j].nom);
                    }
                    else
                    {
                        j--;
                    }
                }
     
            return tableau_tous;
     
        }
    Avant de définir cette fonction, je mettais des cartes "à la main" pour tester, et lorsque je cliquais sur mes boutons, ils réagissaient correctement.

    Ensuite, je prends les 5 premières cartes du tableau_joueur pour les mettre au joueur 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Carte[] tab_joueur1 = {tab_tous[0], tab_tous[1], tab_tous[2], tab_tous[3], tab_tous[4]};
    Une fois le tableau des cartes du joueur 1 crée, je créé la main du joueur (classe MainJoueur) qui est chargé de créer 5 boutons avec les cartes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MainJoueur joueur1 = new MainJoueur(tab_joueur1);
    voilà la classe MainJoueur et code du constructeur :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public class MainJoueur extends JPanel implements ActionListener {
     
        public static JButton carte1;
        public static JButton carte2;
        public static JButton carte3;
        public static JButton carte4;
        public static JButton carte5;
     
        public static JButton tabBouton[] = {carte1, carte2, carte3, carte4, carte5};
     
     
        MainJoueur (Carte[] tabCarte)
        {
            for(int i = 0; i<tabCarte.length; i++)
            {   
                tabBouton[i] = new JButton("", new ImageIcon(tabCarte[i].imageIle));
                tabBouton[i].setToolTipText(tabCarte[i].nom);
                tabBouton[i].setPreferredSize(new Dimension(101, 156));
                //ActionListener l =new actionPerformed(this);
                tabBouton[i].addActionListener((ActionListener) this);
     
                this.add(tabBouton[i]);
            }
     
        }
     
        // fonction qui désactive le bouton sur lequel on à cliqué
         public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
     
            for(int i = 0; i<tabBouton.length; i++) {
                if(source == tabBouton[i]) // && tabBouton[i].isEnabled())
                {
                    JOptionPane.showMessageDialog(this, "Carte desactivée", "Choisissez un pont", JOptionPane.QUESTION_MESSAGE);
                    tabBouton[i].setEnabled(false);
                }
           }
     
        }

    Mon problème ce situe donc au niveau de mon if
    ne fonctionne plus : le pop up n'apparait plus et le bouton ne se désactive pas.

    Avez vous une idée d'où peut venir le problème ?

    Merci de votre aide !

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    Tu as combien de joueurs ? Plusieurs ?

    Parce que la variable "tabBouton" de "MainJoueur" est declarée statique, donc commune à tous les "MainJoueur". Et d'apres ce que je comprends de ton programme, ca a tout l'air d'etre une variable que ne devrait pas etre statique...

    Et si tu as plusieurs joueurs, "tabBouton" sera ecrasée...

  3. #3
    Invité
    Invité(e)
    Par défaut
    C'était effectivement sa !

    En créant un deuxième tableau pour le second joueur sa fonctionne.

    Merci beaucoup !

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

Discussions similaires

  1. [Debutant] Problème de boutons
    Par Welldone dans le forum Débuter
    Réponses: 5
    Dernier message: 08/07/2005, 15h37
  2. [C#] problème de bouton transparent
    Par mbibim63 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/05/2005, 14h50
  3. Réponses: 24
    Dernier message: 11/01/2005, 10h12
  4. [FLASH MX]Problème de bouton et de _level
    Par Geilgestorm dans le forum Flash
    Réponses: 9
    Dernier message: 01/07/2004, 16h37
  5. Problème de boutons radio
    Par BRAUKRIS dans le forum Composants
    Réponses: 3
    Dernier message: 03/06/2004, 02h41

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