Bonjour à tous,
J'ai un petit soucis en Java. Pour faire simple, je dois créer un texte à trous, où les trous sont enfaite des JTextField. Quand on remplis ce JTextField, un évènement se passe en fonction du mot tapé dedans (si c'est le mot attendu, la case devient verte, sinon, elle devient rouge).
Jusque là tout va bien. Le truc c'est que j'ai genre 100 phrases avec un JTextField chacune. J'ai tout déclaré en dur, et c'est pas très jolie à voir. Je me réoriente donc vers une solution plus "jolie": mettre les questions et leurs réponses dans un fichier XML, et tout créer dans une boucle.
Pour l'instant, ça ressemble à ça (j'utilise JDOM pour le parsage xml) :
Sachant que le fichier XML ressemble à ça:
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 Element courant; List listQr = racine.getChildren("qr_enigmes"); Iterator i = listQr.iterator(); k = 0; courant = (Element)i.next(); while(i.hasNext()) { courant.getChild("question").getText(); courant.getChild("reponse").getText(); lab_eni[k] = new JLabel(courant.getChild("question").getText()); rep[k] = new JTextField(10); rep[k].addFocusListener(new FocusListener() { public void focusGained(FocusEvent e) {} public void focusLost(FocusEvent e) { if (rep[k].getText().equals(courant.getChild("reponse").getText())) { rep[k].setBackground(new Color(200,245,137)); rep[k].setEditable(false); progressBar_enigmes.setValue(progressBar_enigmes.getValue()+2); } else { rep[k].setBackground(new Color(249,134,134)); } } }); monPan.add(lab_eni[k]); monPan.add(rep[k]); courant = (Element)i.next(); k = k+1;
Tout ça me construit bien ce que je veux, visuellement parlant. Seulement, quand l'évènement est invoqué (quand je rentre/sors d'un des JTextField), il me prend la valeur de k à la sortit du while. Fin en gros, si avec le while la variable k est arrivé à 18, quand l'évènement est invoqué il me le fait pour k=18, même si c'était pour la 2nd case (ou k=2 lors de la déclaration de cette case).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <enigmes> <qr_enigmes> <question>- Il a les memes parents que moi :</question> <reponse>frere</reponse> </qr_enigmes> <qr_enigmes> <question>- Son metier est de couper les cheveux :</question> <reponse>coiffeur</reponse> </qr_enigmes> </enigmes>
Pour ce qui est de la déclaration de k, je suis obligé de le déclaré au niveau de ma classe, sinon je ne pourrais pas y accéder dans le FocusListener.
Donc en gros, je souhaiterais savoir comment figer le nom de mes variables au moment de leur déclaration.
(Je sais pas si j'ai été très clair, mais je vois pas trop comment expliqué ça autrement).
Merci d'avance !
Partager