Bonjour tout le monde!
Habituellement je ne demande pas d'aide sur les forum de peur de déranger et puis j'arrive généralement à trouver la solution par moi même.
Cependant, je tombe sur un cas qui pourtant parrait simple mais que je n'arrive pas à régler.
contexte: j'ai créé un petit JFrame qui affiche la position de villages.
mon Main créer une carte (JFrame) qui a 2 méthodes:
- updateCarte : supprime tout le montenu de son JPanel container et le réinitialise ( couleur...) et fini par via une liste d'objet JPanel (mes villages) itérer l'insersion de mes points via laméthode add() de mon JPanel container )
- newVillageToList : ajoute un village à la liste des villages et fait appel à la méthode updateCarte()
Les villages sont instanciers dans mon main (Village qui extends JPanel) et via le constructeur de Village, la méthode newVillageToList est appelé ce qui rajoute ce village a la liste des villages du JFrame et met à jour par la même occasion le container de celle ci.
dans cet exemple, j'instancie 2 Villages. et mon problème est que le SYSOUT ( présent dans la méthode paintComponent de la classe Village) apparaît en double...
De plus, le background color du JPanel container du JFrame n'apparait pas!!
si quelqu'un aurait une idée svp!
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 package models; import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel; public class Village extends JPanel { private static final long serialVersionUID = 1L; private String nom; private Joueur proprietaire; private int posX, posY; private int population; private Carte carte; public Village(String nom, Joueur proprio, int pX, int pY,Carte carte) { this.nom = nom; this.proprietaire = proprio; this.posX = pX; this.posY = pY; this.population = 8; this.carte = carte; carte.newVillageToList(this); proprietaire.getVillageList().add(this); } @Override protected void paintComponent(Graphics g) { System.out.println(this.nom + " : j'apparai sur la carte"); int taille = 0; if (population < 50) taille = 8; if (population >= 50 && population < 100) taille = 12; if (population >= 100) taille = 16; g.setColor(Color.RED); g.fillOval(posX, posY, taille, taille); // try { // Thread.sleep(2); // } catch (InterruptedException ie) { // ie.printStackTrace(); // } } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public Joueur getProprietaire() { return proprietaire; } public void setProprietaire(Joueur proprietaire) { this.proprietaire = proprietaire; } public int getPosX() { return posX; } public void setPosX(int posX) { this.posX = posX; } public int getPosY() { return posY; } public void setPosY(int posY) { this.posY = posY; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } public Carte getCarte() { return carte; } public void setCarte(Carte carte) { this.carte = carte; } }
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 package models; import java.awt.BorderLayout; import java.awt.Color; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JPanel; public class Carte extends JFrame { private static final long serialVersionUID = 1L; private JPanel container = new JPanel(); List <Village> villageListe= new ArrayList<Village>(); public Carte() { // JFrame this.setTitle("carte"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setResizable(false); this.setSize(500, 500); //container container.setBackground(Color.GREEN); container.setLayout(new BorderLayout()); this.setContentPane(container); this.setVisible(true); } public void updateCarte() { container.removeAll(); container.setBackground(Color.GREEN); container.setLayout(new BorderLayout()); for (Village v : villageListe) { container.add(v, BorderLayout.CENTER); } this.setContentPane(container); } public void newVillageToList(Village village) { this.villageListe.add(village); updateCarte(); } }
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 package models; import java.util.List; public class Main { public static void main(String[] args) { Carte carte = new Carte(); Joueur joueur1 = new Joueur("Vincent"); Village v1 = new Village("eden", joueur1, 200, 200,carte); Village v2 = new Village("paris", joueur1, 50, 50,carte); v1.setPopulation(50); List<Village> liste = joueur1.getVillageList(); for (Village v : liste) { System.out.println("Je suis le village "+v.getNom()+". J'appartiens au joueur "+v.getProprietaire().getNom()); } } }
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 package models; import java.util.ArrayList; import java.util.List; public class Joueur { String nom; List<Village> villageList= new ArrayList<Village>(); public Joueur() { } public Joueur(String nom) { this.nom = nom; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public List<Village> getVillageList() { return villageList; } public void setVillageList(List<Village> villageList) { this.villageList = villageList; } }
Partager