Bonjour,
J'ai un problème qui semble simple à première vu mais je ne trouve pas de solution...j'espère que vous pourrez éclairer ma lanterne !
Je vous expose mon problème.
J'ai 3 classes : Une classe Salon, une Objet et une PanelObjet.
La classe PanelObjet gère l'affichage d'image dans la classe Objet.
La classe Salon est une Jframe avec des boutons.
La classe Objet est une Jframe avec des images.
J'ai donc deux fenêtres "windows" différentes.
Je désire que lorsque l'on clique sur un bouton dans Salon, une image apparaisse dans la classe Objet !
J'ai créé mon code tous marche parfaitement (l'affichage des images etc..) MAIS lorsque je clique sur mon bouton mon image n’apparaît pas...
Voici ce que j'ai fait pour l'instant :
La classe PanelObjet
La classe Objet :
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 public class PanelObjet extends JComponent { /** * */ private static final long serialVersionUID = 1L; private BufferedImage clef1; private BufferedImage objets1; public static boolean magique = false; public PanelObjet() { try { clef1 = ImageIO.read(new File("./images/clef1.jpg")); objets1 = ImageIO.read(new File("./images/objets.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void paintComponent(Graphics g) { g.drawImage(objets1, 0, 0, (objets1.getWidth(this)), (objets1.getHeight(this)), this); if (magique == true) { g.drawImage(clef1, 7, 5, (clef1.getWidth(this)), (clef1.getHeight(this)), this); } } }
La classe Salon :
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 public class Objets extends JFrame { /** * */ private static final long serialVersionUID = 1L; private PanelObjet graphic = new PanelObjet(); public Lance lance; /** * Constructeur de la classe niveau1 */ public Objets() { setLocation(0,430); setTitle("Tes objets"); setSize(465, 88); this.getContentPane().add(graphic); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.setVisible(true); } }Je pense que mon problème se situe au niveau de ma valeur booleenne qui n'est pas détecté par PanelObjet lorqu'elle est vraie.
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 public class Salon extends JFrame { /** * */ private static final long serialVersionUID = 1L; private Panel graphic = new Panel("salon"); public Lance lance; public static boolean montrer = false; public static boolean montrer2 = false; /** * Constructeur de la classe niveau1 */ public Salon() { setTitle("Escape Room"); setSize(812, 420); this.setContentPane(graphic); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.setVisible(true); final JButton clef1 = new JButton(""); clef1.setBounds(555, 364, 20, 22); getContentPane().add(clef1); clef1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { PanelObjet.magique = true; repaint(); } }); } }
Pour moi la solution serait "d'actualiser" la classe PanelObjet et Objet pour qu'elles se rendent compte que la valeur est devenue vraie
Je sais aussi qu'il faudrait ajouter la méthode repaint() dans Objet mais je ne sais pas trop où.
Mon message est assez long, merci d'avance à tous ceux qui vont se pencher sur mon problème
Cordialement
Partager