Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > AWT/SWING > EDT/SwingWorker
EDT/SwingWorker Vos questions sur l'EDT (Event Dispatching Thread) et l'utilisation de SwingWorker.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/12/2012, 17h05   #1
Flynd
Invité de passage
 
Homme
Inscription : août 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2012
Messages : 3
Points : 0
Points : 0
Par défaut [MouseListener] Action sur cases d'un échiquier

Bonjour à tous !
J'ai un petit problème dans mon code et je galère à trouver une réponse claire (que ce soit sur le fofo ou google).

Donc c'est simple :
j'ai un jeu en JFrame qui contient un plateau en JPanel. Dans ce JPanel se trouve longueur*largeur cases. Le problème est tout bête : lorsque je clique sur mes cases, elles changent la valeur de la première case au lieu d'elle-même.

Bref je ne comprends pas pourquoi mon MouseListener pourtant défini dans l'objet case ne marche pas sur la case en question.

Exemple :




Et le code (case) :

Code :
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
import javax.swing.JPanel;
 
enum Etat {LIBRE, NOIR, BLANC, PRIS};
 
class CasePlateau extends JPanel implements MouseListener {
 
	Etat etatCase = Etat.LIBRE;
	int x, y;
	String imageCaseNom = "libre.jpg";
 
	public CasePlateau(Etat pEtatCase, int pX, int pY){
		etatCase = pEtatCase;
		x = pX*Plateau.tailleCase ;
		y = pY*Plateau.tailleCase ;
		this.addMouseListener(this);
	}
 
	public Etat getEtatCase() {
		return etatCase;
	}
 
	public void setEtatCase(Etat pEtatCase) {
		etatCase = pEtatCase;
		switch (etatCase)
		{
			case LIBRE :
				imageCaseNom = "libre.jpg";
				break;
			case NOIR :
				imageCaseNom = "noir.jpg";
				break;
			case BLANC :
				imageCaseNom = "blanc.jpg";
				break;
			case PRIS :
				imageCaseNom = "pris.jpg";
				break;
		}
		repaint();
	}
 
	public void paintComponent(Graphics g)
	{
		try {
	        Image img = ImageIO.read(new File(imageCaseNom));
	        g.drawImage(img, x, y, Plateau.tailleCase, Plateau.tailleCase, this);
	      } catch (IOException e) {
	        e.printStackTrace();
	      }    
	}
 
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
 
	}
 
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
 
	}
 
	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
 
	}
 
	@Override
	public void mousePressed(MouseEvent e) {
		setEtatCase(Etat.BLANC);
	}
 
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
 
	}
}
Et la classe appelante (plateau) :

Code :
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
import java.awt.Color;
import javax.swing.JPanel;
import javax.swing.OverlayLayout;
 
public class Plateau extends JPanel {
 
	CasePlateau CasesPlateau [][] ;
	public static int taillePlateau = 9;
	public static int tailleCase = 40;
	public Plateau() 
	{
		setBackground(Color.ORANGE); 
		setLayout( new OverlayLayout( this ));
 
		CasesPlateau = new CasePlateau [taillePlateau] [taillePlateau];
		for (int i = 0 ; i < taillePlateau ; i++)
		{
			for (int j = 0 ; j < taillePlateau ; j++)
			{
				CasesPlateau[i][j] = new CasePlateau(Etat.LIBRE, i, j);
				add(CasesPlateau[i][j]);
			}
		}
	}
 
	public void setCasesTableau(int x, int y, Etat etatCase)
	{	
		CasesPlateau[x][y].setEtatCase(etatCase);
	}
}
Merci d'avoir lu jusque là et de chercher à m'aider !
Désolé si une question du type a déjà été posée dernièrement, je ne l'ai pas trouvée.

Flynd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2012, 18h08   #2
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 287
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 287
Points : 32 766
Points : 32 766
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Ce que tu fais là, c'est superposer 64 panels de la tailel de ton plateau et qui ne dessinent qu'une case. Du coup ils prenent les évenement sur toute la taille.

Tu dois faire des panels plus petite t construire un layoutmanager qui les met à la bonne place.

Avec ta structure, seul la panel du dessus recevra les events.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2012, 18h10   #3
Flynd
Invité de passage
 
Homme
Inscription : août 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2012
Messages : 3
Points : 0
Points : 0
Ok je vais voir ça, merci beaucoup.
Je mettrai résolu si c'est bon après coup !

Edit : J'ai un début de truc intéressant. Je valide donc, merci !
Flynd est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h06.


 
 
 
 
Partenaires

Hébergement Web