Interraction entre class JButon / JFrame
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:
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);
}
} |
Code:
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);
}
}
} |
Je travail sur Intellij Idea
Merci d'avance!