Bonjour, je suis en train de programmer un jeu en Java (plus précisément Javas'cool ...) et actuellement je rencontre un problème de méthode paintComponent et de JPanel, je m'explique.
Pour faire un menu démarrer avec des boutons (Jouer, quitter, regle) j'ai besoin d'un JPanel pour afficher ces boutons dans ma JFrame. Une fois qu'on appuie sur jouer je dois avoir le bouton Quitter qui reste affiché et une map dessiner à l'aide d'un paintComponent() donc la map doit être imbriquée dans le JPanel or je n'arrive pas à afficher de paintComponent dans un autre JPanel. J'arrive pas à être trop clair sur le problème mais en gros j'aimerai savoir comment imbriqué un paintComponent() dans un JPanel. (A savoir que l'on doit utiliser des SetBounds actuellement. Je sais assez bien convertir le Java en Javas'cool mais si vous pouvez essayer de ne pas donner des codes trop complexe ce serait sympa ou tout simplement me donner des pistes. voici mon code :

J'ai aussi un second problème moins important, je veux mettre une image en background or si je passe par un JLabel, celui-ci passe au dessus des boutons c'est plutôt gênant et je comprends pas pourquoi

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import java.io.IOException;  
//Permet d'ouvrir un lien HTML
import java.util.Properties; 
// Inter face Graphique
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
//-----------------------------------Action Listener--------------------------
ActionListener lancerLeBonProgramme = new ActionListener() { // ActionListener des boutons, associe des voids aux boutons.
	public void actionPerformed(ActionEvent clic) 
	{	if (clic.getActionCommand().equals("jouer")) { Jouer();}
		if (clic.getActionCommand().equals("regle")) {Regle();}
		if (clic.getActionCommand().equals("quitter")) {Quitter();}
		}
};
//-----------------------------------------------------------------------------
 
//----------------------Creation d'une nouvelle fenetre  ----------------------
JFrame f = new JFrame(); // la nouvelle fenetre s'appelle f
 
int largeurFenetre=1200;
int hauteurFenetre=700;
int xc=largeurFenetre/2; //milieu fenetre
int yc=hauteurFenetre/2; // milieu fenetre
int largeur;
int hauteur;
int posX;
int posY;
int taillecarreau=30;
int OrigX;
int OrigY;
int NbCarreauX=16;
int NbCarreauY=6;
 
boolean redimensionnement=false; // empeche le redimenssionement de la fenetre
boolean accueil=true; // permet l'affichage bouton sur l'accueil
 
	JPanel cadre = new JPanel();
	Dessin map = new Dessin();
// ton cadre doit ?tre un JPanel dans ce cas. Les cadres de type Dessin() sont fait pour supporter
// du graphisme...
 
// par contre , dans une fenetre, tu peux y mettre plusieurs cadres dont un serait du type dessin()
 
 
//----------------------------------------------------------------------------
 
//---------------------------------Definition boutons-------------------------
JButton jouer = new JButton("<html><font size = 7>Jouer</font></html>"); // Bouton Jouer
JButton regle = new JButton("<html><font size =7>R&egrave;gles</font></html>"); // Bouton Regle
JButton quitter = new JButton("<html><font size = 5>Quitter</font></html>");//Bouton Quitter
//----------------------------------------------------------------------------
 
//---------------------------------Images-------------------------------------
	Icon boutonquitter = new ImageIcon("BoutonQuitter.jpg"); // Image pour le bouton quitter
	Icon WallPaper = new ImageIcon("Wallpaper.png"); // Image pour le bouton quitter
 
//----------------------------------------------------------------------------
 
//------------------Initialisation de la fenetre -----------------------------
void afficheFenetre(){
     f.setTitle("BomberMan");             // titre
	f.setSize(largeurFenetre, hauteurFenetre+100);      //taille
     f.setLocation(0,0);       			   //position
	f.add(cadre);    			  // insertion du cadre dans la fenetre
	f.setVisible(true);			  // affichage de la fenetre
	f.setResizable(redimensionnement); // empeche le redimensionnement de la fenetre
}
 
void Jouer(){
	accueil=false; // stop la boucle qui affiche les 3 boutons
	cadre.remove(jouer); // vire les boutons
	cadre.remove(regle);
	quitter.setBounds(largeur-170,20,150,50); // repositionne le bouton
	cadre.add(quitter); // remet le bouton quitter
	quitter.setOpaque(true);// laisse l'opacite du bouton quitter
	cadre.repaint(); // repositionne chaque element ayant changer de position
}
 
void Quitter(){
f.setVisible(false); // ferme la fenetre
accueil=false; // ferme la boucle du menu principal
}
 
void Regle(){
	Properties sys = System.getProperties();
String os = sys.getProperty("os.name"); //on recupere le nom du systeme
Runtime r = Runtime.getRuntime(); //on recupere l'environnement d'execution
      try{ //on essaye
      	if (os.startsWith("Mac")) // si on est sur MAC
		r.exec("open http://gurvanisn.forumactif.org/h1-regle-pendu"); //ouvre la page des regles a partir d'une commande dans l'evt d'execution
	else // si on est sur Windows
	r.exec("cmd /c start http://gurvanisn.forumactif.org/h1-regle-pendu");} //ouvre la page des regles a partir d'une commande dans l'evt d'execution
      catch (IOException ex){ //si cela echoue
      ex.printStackTrace();
      println("Impossible d'ouvrir le navigateur."); // affiche ce message si l'ouverture a echoue
   sleep(200);
    }
}
 
void boutons(){
	largeur = cadre.getWidth(); // donne la largeur de la fenetre 
	hauteur = cadre.getHeight(); // donne la hauteur de la fenetre
 
	regle.setBounds((largeur/2)-75,hauteur/2-120,150,90); // donne les dimensions du bouton regle
	regle.setActionCommand("regle"); // associer un mot au bouton pour l'action Listener
	regle.addActionListener(lancerLeBonProgramme); // associer l'actionListener leBonProgramme au bouton
	cadre.add(regle);
 
	jouer.setBounds((largeur/2)-75,hauteur/2,150,90); // Le bouton jouer lance le programme principal
	jouer.setActionCommand("jouer"); // associer un mot pour l'actionListener
	jouer.addActionListener(lancerLeBonProgramme); // Associer l'actionListener au bouton
	cadre.add(jouer);
 
	quitter.setBounds((largeur/2)-75,hauteur/2+120,150,50); // donne les dimension du boutn
	quitter.setActionCommand("quitter"); // associer quitter au bouton pour l'action listener
	quitter.addActionListener(lancerLeBonProgramme); // donne l'action listener pour lequel emettre
	quitter.setIcon(boutonquitter); // associer une image au bouton quitter
	cadre.add(quitter);
}
 
void main(){
	clear(); // efface la console
	cadre.setBackground(Color.WHITE);
	afficheFenetre(); //ouvre la fenetre et ses propriete
	accueil=true; // reactive le menu principal
	cadre.setLayout(null);
 
 
//	JLabel background = new JLabel(WallPaper);
//	background.setBounds(0,0,largeurFenetre,hauteurFenetre+100);
//	background.setOpaque(false);
//	cadre.add(background);
 
	boutons();	// met les boutons a leur bonne place
 
	clear();
	afficheFenetre();
 
	OrigX=cadre.getWidth()/2-(taillecarreau*2*NbCarreauX)/2;
	OrigY=cadre.getHeight()/2-(taillecarreau*2*NbCarreauY)/2;
}
 
public class Dessin extends JPanel{
	public void paintComponent(Graphics g){
 
for(int x=0; x<NbCarreauX;x++){
	posX=x*2*taillecarreau;
	for(int y=0; y<NbCarreauY;y++){
		g.setColor(Color.BLACK);
		posX=x*(2*taillecarreau)+OrigX;
		posY=y*(2*taillecarreau)+OrigY;
		g.fillRect(posX,posY,taillecarreau,taillecarreau);
 
 
		posX=x*2*taillecarreau+taillecarreau+OrigX;
		posY=y*2*taillecarreau+taillecarreau+OrigY;
		g.fillRect(posX,posY,taillecarreau,taillecarreau);
 
		g.setColor(Color.RED);
 
		posX=x*2*taillecarreau+taillecarreau+OrigX;
		posY=y*2*taillecarreau+OrigY;
		g.fillRect(posX,posY,taillecarreau,taillecarreau);
 
 
		posX=x*2*taillecarreau+OrigX;
		posY=y*2*taillecarreau+taillecarreau+OrigY;
		g.fillRect(posX,posY,taillecarreau,taillecarreau);
 
}
}
	}
}