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 :
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.
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; }
Ensuite, je prends les 5 premières cartes du tableau_joueur pour les mettre au joueur 1 :
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 Carte[] tab_joueur1 = {tab_tous[0], tab_tous[1], tab_tous[2], tab_tous[3], tab_tous[4]};
voilà la classe MainJoueur et code du constructeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MainJoueur joueur1 = new MainJoueur(tab_joueur1);
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part source == tabBouton[i]
Avez vous une idée d'où peut venir le problème ?
Merci de votre aide !
Partager