Bonsoir, voici mon code et je vous explique on problème après:


Classe CreationGrille:

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
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 
 
public class CreationGrille extends JPanel {
 
	/**
         * 
         */
	private static final long serialVersionUID = 1L;
	// ça je touche pas, je ne sais pas tout ce que tu cherches à faire, et tu
	// verras les erreurs dedans plus tard (j'en vois 2 au moins)
	GenerateurCarte generateurCarte = new GenerateurCarte();// mon generateur de
															// carte qui va me
															// permettre de
															// generer la carte
	JoueurHumain joueurHumain = new JoueurHumain("joueur1");
	JoueurHumain joueurHumain2 = new JoueurHumain("joueur2");
	ArrayList<ModelJoueur> joueurs = new ArrayList<ModelJoueur>();
	GrilleJeu grille = new GrilleJeu();
 
	// je sais pas ou tu appelles initialisation, mais il pourrait être appelé
	// dans le constructeur
	public CreationGrille() {
		initialisation();
	}
 
	public void initialisation() {
		joueurs.add(joueurHumain);// j ajoute 2 joueurs humains
		joueurs.add(joueurHumain2);
		GrilleJeu grilleJeu = generateurCarte.genererCarte(5, 5,
				ConstanteCarte.VALEUR_MAX_GENERATEUR / 5,
				new ArrayList<ModelJoueur>());// je genere ma carte de la grille
												// de jeu
	}
 
	// jusque là j'ai pas touché
 
	// maintenant pour dessiner dans un panel, il faut au moins redéfinir paint
	// :
	public void paint(Graphics g) {
		super.paint(g);
		// et appeler le code qui dessiner ce qu'on veut...
		grilleGraphique(g, grille);
	}
 
	public void grilleGraphique(Graphics g, GrilleJeu grilleJeu) {
		CaseTerrain[][] caseTerrains = grille.getGrille();
 
		int width = getWidth();
		int height = getHeight();
		int largeur = width / grille.getAbcisseMax();
		int hauteur = height / grille.getOrdonneeMax();
		// la y'a un truc bizarre : les abscisses c'est en x, et les ordonnées
		// en y d'habitudes, mais bon je touche pas, peut être que c'est inversé
		// dans grille.
		for (int i = 0; i < grille.getAbcisseMax(); i++) {
			for (int j = 0; j < grille.getOrdonneeMax(); j++) { 
			caseGraphique(g, caseTerrains, i, j, largeur, hauteur);
			}
		}
	}
 
	private void caseGraphique(Graphics g,CaseTerrain[][] caseTerrains, int i, int j,int largeur,int hauteur) {
		int x = j * largeur;
		int y = i * hauteur;
		TypesTerrains terrain = caseTerrains[i][j].getTerrain().getTerrainsJeu();
		/* pour les images : aller dans la classe TypeGraphique et ajouter au case corespondant image = 'image coresponant au type';*/
		g.drawImage(TerrainGraphique.selectImage(terrain, null), x, y, largeur, hauteur, this);
	}
 
	// en ensuite vient l'aspect clic (on pourrait faire mieux, mais ça va te
	// suffire)
	public void addImageClicker(final ImageClicker imageClicker) {
		// en encapsule le faux listener dans le vrai listener de souris (ici un
		// MouseAdapter, une implémentation de MouseListener qui ne t'oblige pas
		// à implémenter toutes ses méthodes (parce qu'elles le sont déjà)
		addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// comme je l'ai dit, on calcule la hauteur et la largeur de la
				// m^me manière qu'on la fait pour dessiner
				int width = getWidth();
				int height = getHeight();
				int largeur = width / grille.getAbcisseMax();
				int hauteur = height / grille.getOrdonneeMax();
				// on détermine la colonne et la ligne dans la grille
				int colonne = e.getX() / largeur;
				int ligne = e.getY() / hauteur;
				// on transmet les informations au faux listener, de manière à
				// ce qu'on puisse réagir avec quand on l'utilise
				imageClicker.click(grille.getGrille()[colonne][ligne]);
				imageClicker.click(grille, colonne, ligne);
			}
		});
	}
 
	public static abstract class ImageClicker {
 
		public ImageClicker() {
		}
 
		// tu n'est pas obligé de mettre les 2, la première peux suffire à tout
		// faire
		// la seconde peut simplifier certains traitements qui ne concernent que
		// la case seule
		// si tu ne mets qu'une seule méthode, au lieu d'une classe abstraite,
		// ImageClicker peut être une interface
		public void click(GrilleJeu source, int colonne, int ligne) {
		}
 
		public void click(CaseTerrain caseTerrain) {
		}
 
	}
}
La classe TerrainGraphique qui va s'occuper de dessier les images:

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
 
public enum TerrainGraphique {
 
	NON_DEFINIE(TypesTerrains.NON_DEFINIE), MER(TypesTerrains.MER), PLAINE(
			TypesTerrains.PLAINE)
	/*
	 * ,FORET ( ),COLINE (), MONTAGNE ( ),JUNGLE ()
	 */;
	private Image image;
 
	private TerrainGraphique(TypesTerrains terrains) {
				this.image = selectImage(terrains, image);
			}
public static Image recupImage(ImageIcon in,Image img){
	img = in.getImage();
	return img;
}
	public static Image selectImage(TypesTerrains terrains, Image image) {
		switch (terrains) {
		//les case sont a completer pour que cela fonctionnent.
		case NON_DEFINIE: 
			break;
		case MER: image = recupImage(new ImageIcon("Images/bleu.gif"),null);
			break;
		case PLAINE:
			break;
 
		default:
			break;
		}
 
		return image;
	}
}

La classe Main classe de test :

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
 
 
public class Main {
	public static void main (String[]args){
 
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
	CreationGrille grille = new CreationGrille();
	frame.setContentPane(grille);
	frame.setVisible(true);
	frame.setSize(200, 200);
 
 
	grille.addImageClicker(new CreationGrille.ImageClicker(){
 
		public void click(CaseTerrain caseTerrain) {
			TerrainJeu terrain = caseTerrain.getTerrain();  
                            switch( terrain.getTerrainsJeu() ) {
                            case MER:
                                       System.out.println("mer"); //un vieil affichage pour l instant
                                       break;
                            case PLAINE:
                            	System.out.println("mer");// de meme
                                       break;
							default:
								break;
 
                            }  }
		});
	}
}

J'aimerais affiché dans mon JFrame les images qui représentent chaque terrain mais quand je lance mon main rien ne s'affiche...
Je sais que mon code est long mais svp aidez moi..
Merci de votre compréhension.