Bonjour,
Je me retourne vers vous encore une fois avec un nouveau souci:
Je voudrais informer un listener qu'une variable à l'interieur d'un autre listener a changé (incrémentée) pour que le premier Listener en prend compte.
Je m'explique:
Je travaille sur un QCM et j'ai une GUI (EcranQcmPourMembAdmin )avec des boutons radios (choix de réponses) et des boutons "suivant" et "précedent" pour naviguer entre les exercices.
Les boutons radios sont écoutés par un Listener sous forme d'une classe interne (BoutonRadioListener) et les boutons de naviguation sont écoutés par une autre classe externe (EcranQcmPourMembAdminListener).
Dans de la classe GUI, j'ai créé des variables "premierCoup" "secondCoup" et "nonTrouve" qui est s'incrémente à l'intérieur du Listener (BoutonRadioListener) à chaque fois que l'utilisateur trouve la bonne réponse au premier coup, ou au second coup...Je voudrais à la fin du QCM afficher les résultats de l'utilisateur (méthode afficherResultatQcm()).
Dans l'état actuel, bien que je parcoure tout les 10 exercices du QCM les résulats ne s'affiche pas comme il faut, exp:
Bonne(s) réponse(s) au premier essai: 1
Bonne(s) réponse(s) au second esai: 0
Question(s)non trouvé(es): 0
L'incrémentation de la variable "premierCoup" se fait uniquement à l'intérieur du listener (BoutonRadioListener). Comment informer l'autre Listener que la variable a changé?
Merci pour votre aide.
Voici les morceaux de code concernés:
la classe EcranQcmPourMembAdmin:
La classe EcranQcmPourMembAdminListener
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
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 .... //declaration de variables.....entre autres... public JRadioButton reponse1 = null; public JRadioButton reponse2 = null; public JRadioButton reponse3 = null; ... private int premierCoup=0; private int secondCoup=0; private int nonTrouve=0; .... private JButton suivant = null; private JButton prcedent = null; //instanciation de deux listeners EcranQcmPourMembAdminListener ecranQcmMembAdminListener = new EcranQcmPourMembAdminListener(this, qcm, compteur, niv,chapi,diffi, user, premierCoup , secondCoup , nonTrouve ); BoutonRadioListener boutonRadioListener = new BoutonRadioListener(); .... //mise des boutons radios sous écouteur reponse1.addActionListener(boutonRadioListener); reponse2.addActionListener(boutonRadioListener); reponse3.addActionListener(boutonRadioListener); .... //mise des boutons de navigation sous ecouteur suivant.addActionListener(ecranQcmMembAdminListener); prcedent.addActionListener(ecranQcmMembAdminListener); //la methode ActionPerformed du listener interne BoutonRadioListener public void actionPerformed(ActionEvent e) { // TODO Raccord de méthode auto-généré //si la reponse est bonne du premier coup if(nombReponFausse[compteur]==0 && exerc.reponseValide(getIndex((JRadioButton)e.getSource()))){ //on affiche un message accompagné d'un son afficherMessageEtJouerEffet("Bonne réponse",new Color(0,255,0),"happy","happy"); //on compte les reponses au premier coup premierCoup++; //si on est à la fin du qcm on affiche les resultats if(compteur==9) afficherResultatQcm(); //on desactive les deux autres boutons desactiverleOuLesBoutonRestant(getIndex((JRadioButton)e.getSource())); } //si la reponse est fausse du premier coup else if(nombReponFausse[compteur]==0 && !exerc.reponseValide(getIndex((JRadioButton)e.getSource()))){ //on compte les fausse reponses nombReponFausse[compteur]++; //on affiche un nouveau message assorti d'un son afficherMessageEtJouerEffet("Mauvaise réponse..! Il faut recommencer",new Color(255,0,0),"sad","sad"); //on desactive le bouton on question getRadioBouton(getIndex((JRadioButton)e.getSource())).setEnabled(false); } //si la réponse est bonne au deuxième coup else if (nombReponFausse[compteur]==1 && exerc.reponseValide(getIndex((JRadioButton)e.getSource()))){ nonResolu[compteur]=false; //on affiche un message accompagné d'un son afficherMessageEtJouerEffet("Bonne réponse",new Color(0,255,0),"happy","happy"); //on desactive le bouton restant desactiverleOuLesBoutonRestant(getIndex((JRadioButton)e.getSource())); //on compte les bonnes reponses au second coup secondCoup++; //si on est à la fin du qcm on affiche les resultats if(compteur==9) afficherResultatQcm(); } //si la réponse est fausse pour la deuxième fois else if (nombReponFausse[compteur]==1 && !exerc.reponseValide(getIndex((JRadioButton)e.getSource()))){ //on affiche un nouveau message assorti d'un son afficherMessageEtJouerEffet("Et alors ..! tu ne vois pas la bonne réponse ?",new Color(255,0,0),"nervous","nervous"); //on compte les reponses non trouvés nonTrouve++; //on desactive le bouton concerné getRadioBouton(getIndex((JRadioButton)e.getSource())).setEnabled(false); //si on est à la fin du qcm on affiche les resultats if(compteur==9) afficherResultatQcm(); } } //la methode qui affiche les résultat private void afficherResultatQcm() { // TODO Raccord de méthode auto-généré //on affiche les resultats dans une boite de dialogue String message=null; message="Bonne(s) réponse(s) au premier essai: "+premierCoup+ "\n"; message+="Bonne(s) réponse(s) au second esai :"+secondCoup+ "\n"; message+="Question(s)non trouvé(es): "+nonTrouve; JOptionPane.showMessageDialog(null, message , "Résultats", JOptionPane.INFORMATION_MESSAGE); }
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
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 public class EcranQcmPourMembAdminListener implements ActionListener{ private EcranQcmPourMembAdmin ecranQcmMembAdmin = null; private ArrayList qcm; private Utilisateur utilisateur = null; private int compteur=0; private String niveau=null; private String chapitre= null; private String difficulte= null; private boolean[] nonResolu; private boolean[] fait; private int premierCoup=0; private int secondCoup=0; private int nonTrouve=0; private int[] fat; public int getPremierCoup() { return premierCoup; } public void setPremierCoup(int premierCoup) { this.premierCoup = premierCoup; } //premier constructeur avec paramètres public EcranQcmPourMembAdminListener(EcranQcmPourMembAdmin eQPMA, ArrayList qcm, int compteur, String niveau, String chapitre, String difficulte, Utilisateur utilisateur){ super(); this.compteur= compteur; this.qcm= qcm; this.ecranQcmMembAdmin=eQPMA; this.chapitre= chapitre; this.niveau=niveau; this.difficulte=difficulte; this.utilisateur=utilisateur; } //second constructeur avec parametres qui permet de récuperer les variables compteurs et boolean public EcranQcmPourMembAdminListener(EcranQcmPourMembAdmin eQPMA, ArrayList qcm, int compteur, String niveau, String chapitre, String difficulte, Utilisateur utilisateur, int premierCoup, int secondCoup, int nonTrouve){ super(); this.compteur= compteur; this.qcm= qcm; this.ecranQcmMembAdmin=eQPMA; this.chapitre= chapitre; this.niveau=niveau; this.difficulte=difficulte; this.utilisateur=utilisateur; this.nonResolu=nonResolu; this.premierCoup=premierCoup; this.secondCoup=secondCoup; this.nonTrouve=nonTrouve; } public void actionPerformed(ActionEvent e) { // TODO Raccord de méthode auto-généré String acte=e.getActionCommand(); if(acte=="Suivant"){ //si l'exercice n'est pas achevé on affiche un message dans une boite if (nonResolu[compteur]) JOptionPane.showMessageDialog(null, "Tu n'as pas fini l'exercice courant!" , "Message", JOptionPane.INFORMATION_MESSAGE); else{ ecranQcmMembAdmin.dispose(); Exercice exo = (Exercice) qcm.get(compteur+1); EcranQcmPourMembAdmin ecranQcmMembAdmin = new EcranQcmPourMembAdmin(qcm, compteur+1,utilisateur,exo,niveau,chapitre, difficulte); ecranQcmMembAdmin.setVisible(true); } } else if (acte=="Précedent"){ ecranQcmMembAdmin.dispose(); Exercice exo = (Exercice) qcm.get(compteur-1); EcranQcmPourMembAdmin ecranQcmMembAdmin = new EcranQcmPourMembAdmin(qcm, compteur-1,utilisateur,exo,niveau,chapitre, difficulte); ecranQcmMembAdmin.setVisible(true); } } }
Partager