Bonsoir, je suis débutant en programmation java ( je n'ai eu qu'un module d'initiation a l’algorithmique en cours du soir ^^") et j'ai un problème avec le pattern observer, y a un truc que je dois pas faire correctement.
Je compte faire un jeu d’énigme, avec une question, une image, un jtextfield pour donner la réponse et un bouton qui sert a changer d'état ( ou chaque état représente une énigme.) pour le moment, j'essaye juste de faire communiquer mon modèle avec ma frame mais l'update ne veut pas s'activer.
Le code du bouton:
Le code de l'action du bouton (dans la classe du modèle donc):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 package controler; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import model.ModelEnigme; public class NextActionListener implements ActionListener { ModelEnigme me = new ModelEnigme(); public void actionPerformed(ActionEvent arg0) { me.next(); } }
Et enfin, la méthode update qu'il y a dans ma frame:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void next() { System.out.println(state.question()); state.next(this); setChanged(); notifyObservers(state.question()); }
Le principe est le suivant: j'ai un état pour chacune des questions renvoyant 3 valeurs: La question, la réponse et l'image.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 @Override public void update(Observable arg0, Object arg1) { String str = (String)arg1; logo.setText(str); logo.repaint(); System.out.println("L'etat à changé !! " +str); }
Quand on donne la bonne réponse et que l'on appuie sur le bouton, le modèle change d’état et renvoie une autre question, image et réponse.
Mais la, j'en suis juste à l'étape ou je dois juste faire changer la question dans test réponse, pour vérifier que le pattern fonctionne bien.
J'ai donc mis quelques tests en console ( les sys.out.print...) pour vérifier et rien, la méthode update n'est même pas invoquée... J'ai du mal faire quelque chose mais je ne trouve pas ou. Pouvez vous m'aider?
Merci d'avance.
Partager