Problème de retour au menu
Bonjour,
Je suis actuellement en train de faire un programme qui contient un menu avec une interface graphique. Le menu contient 2 boutons, "Quizz" et "Images" (qui correspondent à des "mini-jeux") qui lorsqu'on clique dessus, affichent 2 autres boutons, "Première" et "Terminale", qui à leur tour affichent 2 boutons "Oui" et "Non" quand on clique dessus. Mon problème est le suivant : lorsque je lance un des deux mini-jeux (par exemple en faisant "Quizz" > "Première" > "Oui"), une nouvelle fenêtre s'ouvre, et j'ai dessus un bouton "Menu" qui permet de revenir au début du menu précédemment cité. Mais une fois de retour sur ce menu, lorsque je suis la même démarche pour lancer le mini-jeu "Images", les deux mini-jeux s'ouvrent alors que seul "Images" devrait s'ouvrir. Je ne sais pas à quoi c'est dû, mais je vous mets le code (j'ai laissé seulement les parties concernées, sinon c'est trop long :D ) :
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 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 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
| public class programme {
static JFrame fenetre = new JFrame("NOMENCLATURE");
static JButton bouton1 = new JButton("QUIZZ");
//etc... création des boutons, etc...
public static void main(String[] args){
bouton1.setSize(500,100); //bouton1 correspond au bouton "Quizz"
bouton1.addActionListener(new quizz());
bouton2.setSize(500,100);
bouton2.addActionListener(new images()); // et bouton2 correspond au bouton "Images"
quitter.setSize(150,150);
quitter.addActionListener(new quitter());
oui.setSize(500,100);
non.setSize(500,100);
non.addActionListener(new reset()); //le bouton non sert à revenir au début du menu lorsqu'on est encore dedans
info.setSize(150,150);
info.addActionListener(new info());
credits.setSize(150,150);
credits.addActionListener(new credits());
pane.setLayout(new FlowLayout());
pane.add(credits);
//etc... on ajoute les différents élements au JPanel...
if(activite.equals("QUIZZ")){
bouton1.addActionListener(new premiere());
bouton2.addActionListener(new terminale());
}
if(activite.equals("IMAGES")){
bouton1.addActionListener(new premiere());
bouton2.addActionListener(new terminale());
}
}
}
public static class quizz implements ActionListener { // à partir de là, tous les ActionListener de chaque bouton
public void actionPerformed(ActionEvent e){
if(activite.equals("activite")){
oui.addActionListener(new Question());
labelX=230;
image.setIcon(new ImageIcon("images/fond/fond2.jpg"));
activite="QUIZZ";
classe="classe";
pane.remove(info);
pane.remove(credits);
bouton1.setText("PREMIERE");
bouton2.setText("TERMINALE");
text2.setText("VOUS AVEZ CHOISI "+activite+" CHOSISSEZ UNE CLASSE");
}
}
}
public static class images implements ActionListener {
public void actionPerformed(ActionEvent e){
if(activite.equals("activite")){
oui.addActionListener(new Test());
labelX=230;
image.setIcon(new ImageIcon("images/fond/fond2.jpg"));
activite="IMAGES";
classe="classe";
pane.remove(info);
pane.remove(credits);
bouton1.setText("PREMIERE");
bouton2.setText("TERMINALE");
text2.setText("VOUS AVEZ CHOISI "+activite+" CHOSISSEZ UNE CLASSE");
}
}
}
public static class premiere implements ActionListener {
public void actionPerformed(ActionEvent e){
if(classe.equals("classe")){
labelX=320;
labelY=(fenetreY/2);
image.setIcon(new ImageIcon("images/fond/fond3.jpg"));
placementY=200;
classe="PREMIERE";
image.setHorizontalAlignment(JLabel.CENTER);
image.setVerticalAlignment(JLabel.CENTER);
pane.add(oui);
pane.add(non);
pane.remove(bouton1);
pane.remove(bouton2);
text2.setText("VOUS AVEZ CHOISI "+activite+" POUR LES ELEVES DE "+classe);
pane.add(image);
}
}
}
public static class terminale implements ActionListener {
public void actionPerformed(ActionEvent e){
if(classe.equals("classe")){
labelX=320;
labelY=(fenetreY/2);
image.setIcon(new ImageIcon("images/fond/fond3.jpg"));
placementY=200;
classe="TERMINALE";
image.setHorizontalAlignment(JLabel.CENTER);
image.setVerticalAlignment(JLabel.CENTER);
pane.add(oui);
pane.add(non);
pane.remove(bouton1);
pane.remove(bouton2);
text2.setText("VOUS AVEZ CHOISI "+activite+" POUR LES ELEVES DE "+classe);
pane.add(image);
}
}
}
public static class reset implements ActionListener{
public void actionPerformed(ActionEvent e){
placementY=75;
labelX=150;
labelY=0;
oui.removeActionListener(new Test());
oui.removeActionListener(new Question());
pane.remove(oui);
pane.remove(non);
pane.add(bouton1);
pane.add(bouton2);
pane.add(image);
quitter.setLocation(((fenetreX/2)-placementX),((fenetreY/2)+placementY));
image.setHorizontalAlignment(JLabel.CENTER);
image.setVerticalAlignment(JLabel.TOP);
text2.setText("CHOISISEZ UNE ACTIVITE");
bouton1.setText("QUIZZ");
bouton2.setText("IMAGES");
activite="activite";
classe="rien";
}
}
public static class Test implements ActionListener {
public void actionPerformed (ActionEvent e){
fenetre.dispose();
new Fenetre(); // lance le mini-jeu "Images"
}
}
public static class Question implements ActionListener{
public void actionPerformed(ActionEvent e){
fenetre.dispose();
new quizz2(); //lance le mini-jeu "Quizz"
}
}
public static String classe() {
return classe;
}
public static JFrame fenetre() {
return fenetre;
}
public static void retourMenu() { // la méthode appelée par les deux mini-jeux pour revenir au menu principal
placementY=75;
labelX=150;
labelY=0;
oui.removeActionListener(new Test());
oui.removeActionListener(new Question());
pane.remove(oui);
pane.remove(non);
pane.add(bouton1);
pane.add(bouton2);
pane.add(image);
quitter.setLocation(((fenetreX/2)-placementX),((fenetreY/2)+placementY));
image.setHorizontalAlignment(JLabel.CENTER);
image.setVerticalAlignment(JLabel.TOP);
text2.setText("CHOISISEZ UNE ACTIVITE");
bouton1.setText("QUIZZ");
bouton2.setText("IMAGES");
activite="activite";
classe="rien";
} |
Et surtout voici le code de l'un des deux mini-jeux, le mini-jeu "Quizz" qui se situe dans une classe à part :
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 42 43
| public class quizz2{
private static JFrame quizz = new JFrame();
// création des boutons, etc...
private JPanel container = new JPanel();
private String classe = programme.classe();
private static JFrame fenetre = programme.fenetre(); //le JFrame qui permet le retour au menu
public quizz2 (){
init();
}
private void init(){
quizz.setSize(fenetreX,fenetreY);
//etc... je vous passe le blabla...
quitter.addActionListener(new quitter());
menu.addActionListener(new menu());
container.setLayout(new FlowLayout());
container.add(quitter);
//etc... on ajoute tous les boutons...
}
public static class quitter implements ActionListener {
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
public static class menu implements ActionListener {
public void actionPerformed(ActionEvent e){
quizz.dispose();
fenetre.setVisible(true);
programme.retourMenu(); //appel de la méthode retourMenu de la classe principale
}
}
}
} |
J'ai conscience que le code est lourd :D mais j'ai essayé d'enlever un maximum de choses inutiles possible pour ne laisser que les choses essentielles.
Surtout si vous voulez une quelconque précision, des screens ou autre je les apporterais bien sûr.
Merci beaucoup de votre aide.
EDIT : le problème vient probablement des .addActionListener, le reste du code est inutile, mais je ne vois pas d'où cela vient exactement.