Bonjour tout le monde,

Je veux créer une grille avec GridLayout pour un jeu dans lequel je souhaite colorier les cases avec un fond uni.
Pour cela, j'utilise la méthode setBackground() de JPanel, sauf que je n'ai pas le résultat attendu.

Les JPanels se colorient en blanc sauf que j'ai toujours une copie de toute la grille qui s'agrège en haut a gauche de l'écran.
Avec quelques tests, ce sont des composants JPanel créés qui s'affichent en double sur le coin.

De plus, j'ai une erreur "No such child : 1" lorsque que j'accède au tableau de JPanel pour définir la couleur de l'arrière plan.

J'essaie de trouver l'erreur mais je ne la vois pas.

Je débute en Java, si vous pourriez me trouver une solution ou une meilleure méthode d’implémentation, je vous remercie d'avance.

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
 
import java.awt.Color;
import java.awt.GridLayout;
import java.util.ArrayList;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Test {
	public static void main(String[] args) {
 
		int width = 50; 
		int height = 50; 
		ArrayList<MyPanel> arr = new ArrayList<>();
 
		JFrame t = new JFrame();
		JPanel pan = new JPanel (new GridLayout (width,height));
		int x = 1;
		int y = 1;
 
		for(int i = 0; i<(width*height);i++){
 
		   MyPanel p = new MyPanel();
		   MyListener listner = new MyListener(p); //MyListener a un champ MyPanel pour afficher les coordonnes dans la console à chaque click sur un JPanel
		   p.addMouseListener(listner);
 
		   if (x > width ) {
			   x = 1;
			   y++;
		   }
 
		   p.setX(x);
		   p.setY(y);
 
		   System.out.println("x : "+x+", y : "+y);
 
		   x++;
		   pan.add(p);
		   arr.add(p);
		}
 
		t.add(pan);
		t.setSize(700, 700);
		t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		t.setResizable(false);
		t.setVisible(true);
 
 
		for(int i = 0; i < arr.size(); i++) {
			t.getContentPane().getComponent(i).setBackground(Color.WHITE);
		}
	}
 
}