Salut à tous,
Je travail sur un projet d'application en Java dans mon école et je suis confronté à un problème d'interaction entre deux de mes classes.
Dans ma classe MenuTitre (Extends JPanel) je créer un nouveau JButon auquel j'ajoute un listener. Ce Jpanel est ensuite réutilisé dans diférents composants JPanel utilisé par ma JFrame.
J'aimerai lors d'un click sur ce bouton changer le JPanel Utilisé par ma Jframe à l'aide de setContentPane(). Pour ce faire j'ai créer une méthode ChangeBody() dans ma JFrame que je comptais appelé dans la classe JButton sur le mouseEvent. Mais j'obtiens une erreur de mon IDE, il refuse d'accèder la méthode si celle-ci n'est pas static. Et bien évidement si je passe celle-ci en static je ne peux plus interagir sur la JFrame.
Le code sera plus parlant (J'ai vidé un peu le code) :
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 package Fenetre.LookAndFeel; import Fenetre.FenetrePrincipale; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MenuTitre extends JPanel { public MenuTitre() { // Bouton Accueil final ImageIcon StartButton = new ImageIcon(this.getClass().getResource("images/StartButton.png")); final ImageIcon StartButtonHover = new ImageIcon(this.getClass().getResource("images/StartButtonHover.png")); final ImageIcon StartButtonClick = new ImageIcon(this.getClass().getResource("images/StartButtonClick.png")); final JButton start = new JButton(); start.setIcon(StartButton); start.setBorder(BorderFactory.createEmptyBorder()); start.setContentAreaFilled(false); start.setPreferredSize(new Dimension(180, 33)); start.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e){FenetrePrincipale.ChangeBody("accueil");}//J'essai d'appelé ma méthode en passant un string en argument public void mousePressed(MouseEvent e){start.setIcon(StartButtonClick);} public void mouseReleased(MouseEvent e){start.setIcon(StartButtonHover);} public void mouseEntered(MouseEvent e){ start.setIcon(StartButtonHover); } public void mouseExited(MouseEvent e){ start.setIcon(StartButton); } }); //Positionnement des éléments sur la barre menu setBackground(Color.WHITE); setPreferredSize(new Dimension(800, 39)); setLayout(new BorderLayout()); add(start, BorderLayout.WEST); } }
Je travail sur Intellij Idea
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 Fenetre; import Fenetre.Accueil.*; import Fenetre.Consult.*; import javax.swing.*; import java.awt.*; public class FenetrePrincipale extends JFrame { BodyConsult bodyconsult = new BodyConsult(); //Deux JPanel qui utilisent le JPanel MenuTitre BodyAccueil bodyaccueil = new BodyAccueil(); public FenetrePrincipale(){ setTitle(""); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setUndecorated(true); setContentPane(bodyconsult); //Par defaut J'affiche mon JPanel bodyconsult dans la JFrame setVisible(true); } public void ChangeBody(String panel){ //Ma méthode ChangeBody, qui reçoit un argument String if (panel == "accueil") { // Si mon argument est le bon, change de JPanel setContentPane(bodyaccueil); } } }
Merci d'avance!






Répondre avec citation





Partager