Bonsoir,
Tout d'abord, désolé pour le titre qui peut faire peur, mais vous allez voir que mon problème est tout bête à comprendre.
En effet, pour alléger mon code et le séparer, j'ai procédé comme ceci :
- Une fenêtre jeu qui contient les bases d'une fenêtre
- Une fenêtre menu qui contient toutes les informations d'une fenêtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class FenetreJeu extends JFrame { public FenetreJeu(String titre) { super(titre); [...] FenetreMenu menu = new FenetreMenu(this); } }
Et le soucis est que le paintComponent n'est pas appelé implicitement comme il devrait l'être. La console n'affiche pas le "test" demandé.
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 public class FenetreMenu extends JFrame { private JButton nouvellePartie; private JButton chargerPartie; private JButton options; private JButton quitter; private FenetreJeu fen; public FenetreMenu(FenetreJeu fen) { System.out.println("Test"); this.fen = fen; Container c = fen.getContentPane(); c.removeAll(); c.add(new FondEcran("name.jpg")); c.add(getPanelCentre(),BorderLayout.CENTER); c.add(getPanelSud(),BorderLayout.SOUTH); c.revalidate(); } [...] public class FondEcran extends JPanel { private Image fond_ecran; public FondEcran(String nom) { fond_ecran = new ImageIcon("name.jpg").getImage(); } public void paintComponent(Graphics g) { super.paintComponent(g); System.out.println("Test"); int larg = fen.getWidth(); int haut = fen.getHeight(); g.drawImage(fond_ecran, 0, 0, larg,haut, fen); } } }
Voici ce que j'ai essayé :
- fen.setContentPane(new FondEcran("name.jpg")); : L'image s'affiche mais pas les Panel, cela freeze mon constructeur.
- Appeler le paintComponent dans le constructeur de FondEcran en transférant les Graphics du container (c.getGraphics() : Le "test" s'affiche mais pas l'image.
Voilà, je ne sais pas quoi faire d'autre, si vous avez une solution ou un autre moyen de séparer le code, je vous en serai très reconnaissant
Cordialement,
Un étudiant en panique
EDIT : Le chemin de l'image est bon, si je fais ma inner-class FondEcran dans FenetreJeu, l'image s'affiche puis laisse place à FenetreMenu (logique, puisque je fais un removeAll()). Je ne peux pas me passer de removeAll() puisque je dois faire plusieurs fenêtres.
Partager