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:

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);
 
	}
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
 
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);
 
		}
 
	}
 
}