KeyListerner sur JFrame OK, mais sur un JPanel ? [JAVA Débutant] - Java - Programmation
Marsh Posté le 22-05-2006 à 21:47:56
Bon, je désespère.
Je colle le code de mes 2 classes:
Classe Jeu
Code :
|
puis Classe Listerner
Code :
|
Pourquoi le Listener ne fonctionne-t-il pas ? Il passe dans le constructeur pourtant
Marsh Posté le 22-05-2006 à 22:02:00
J'ai pas regardé l'histoire du listener mais déjà je trouve assez consternifiant cette histoire de Jeu (qui est ton appli principale) qui hérite de JPanel...
Ton appli principale, c'est ton appli principale. Elle met en place les différents composants (la frame, les boutons, la zone d'affichage du jeu, c'est à dire le JPanel customisé pour dessiner un pendu). Ce n'est pas à elle de s'occuper comment dessiner un pendu.
Donc tu dois écrire au minimum 2 classes
- une classe AffichageJeu (par exemple) qui hérite de JPanel
- une classe Jeu qui instancie les composants dont elle a besoin (dont AffichageJeu) et qui possède éventuellement toute la logique du jeu du pendu.
- éventuellement une troisième classe qui possède le main() et instancie un Jeu
Et j'avais dit d'utiliser paintComponent().
Commence par faire ça, on verra ensuite l'histoire du listener.
Marsh Posté le 22-05-2006 à 22:10:01
Merci bien
Je tente, et je reviens
Marsh Posté le 22-05-2006 à 22:23:05
Voila, alors j'ai plusieurs classes maintenant:
- Jeu
- Affichage
- Listener
- Lancer jeu (avec juste un main() qui fait un new Jeu)
Jdétaille Jeu et Affichage:
Jeu:
Code :
|
Affichage:
Code :
|
Maintenant, comment faire afficher dans la JFrame (fenster) de Jeu, le JPanel d'affichage ?
Marsh Posté le 22-05-2006 à 23:09:23
Ben tu crées un objet Affichage et tu l'ajoutes à ta fenêtre ! C'est JPanel avant tout :
Affichage affichage = new Affichage(); |
par exemple
Marsh Posté le 22-05-2006 à 23:16:20
Ahh ok
Ok ça marche plus ou moins, maintenant j'aimerais faire marcher le KeyListener sur mon affichage ... il rentre ds le constructeur, mais ne capte pas la touche préssée
Marsh Posté le 22-05-2006 à 23:26:56
C'est sans doute ton JButton qui doit capter le focus et donc rendre inopérant le keylistener sur la frame... Essaye d'enlever le bouton pour voir ?
Marsh Posté le 22-05-2006 à 23:40:13
Jep, c'était ça ... mais maintenant, j'update mon compteur "pendaison", mais ... le dessin ne s'update pas en meme temps
Ya une astuce pour redessiner le truc ?
Marsh Posté le 22-05-2006 à 23:43:49
repaint() ?
Marsh Posté le 22-05-2006 à 23:52:36
Hm oui, mais seulement quand la valeur de "pendaison" change ...
Je ne vois pas comment le faire ... faut un autre Listener ? :|
Marsh Posté le 23-05-2006 à 00:06:41
Heu ben tu ajoutes le rapaint() dans ta méthode incrementation() ? Tu as eu la bonne idée de faire une méthode pour le changement d'état alors autant s'en servir.
Marsh Posté le 23-05-2006 à 00:12:14
Mais Incrementation() est dans la classe Jeu, et le Paint() s'effectue dans Affichage
Je reposte mon code actuel:
JEU:
Code :
|
AFFICHAGE:
Code :
|
Marsh Posté le 23-05-2006 à 00:18:42
ParadoX a écrit : Mais Incrementation() est dans la classe Jeu, et le Paint() s'effectue dans Affichage |
Et ? Tu peux pas appeler le repaint() d'Affichage ?
Marsh Posté le 23-05-2006 à 00:22:07
gm_superstar a écrit : Et ? Tu peux pas appeler le repaint() d'Affichage ? |
Ben je ne vois pas comment, la seule instance d'Affichage que j'ai ds Jeu est "affichage", et elle n'existe que dans le constructeur. Par ailleurs, la méthode repaint() n'est pas définie dans Affichage ... faut-il que je le fasse moi-même ?
Marsh Posté le 23-05-2006 à 00:25:22
ParadoX a écrit : Ben je ne vois pas comment, la seule instance d'Affichage que j'ai ds Jeu est "affichage", et elle n'existe que dans le constructeur. |
Ben il serait temps d'en faire une donnée membre de ta classe Jeu non ?
ParadoX a écrit : Par ailleurs, la méthode repaint() n'est pas définie dans Affichage ... faut-il que je le fasse moi-même ? |
repaint() est une méthode de JPanel (de JComponent en fait)
Marsh Posté le 23-05-2006 à 00:37:29
gm_superstar a écrit : Ben il serait temps d'en faire une donnée membre de ta classe Jeu non ? |
Ah d'accord
Ok, j'ai donc rajouté dans Jeu:
Code :
|
...
et plus bas:
Code :
|
Mais maintenant (désolé ), il me redessine un truc tout moche par dessus, et quand je passe une fenetre windows devant pour "nettoyer" le truc, je vois qu'il n'a redessiné que le mat de départ, sans avoir mis à jour "pendaison".
En vérifiant, "pendaison" est bel et bien incrémenté, mais .. affichage ne le prends pas en compte
Marsh Posté le 23-05-2006 à 01:32:22
Problème résolu
Marsh Posté le 22-05-2006 à 21:23:36
Bonjour,
Quand j'ajoute un Keylistener sur un JFrame entier, tout fonctionne ... mais quand je fais la même chose avec un JPanel, ça ne marche pas. Y a-t-il une solution, ou ce n'est pas possible ?
---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt