Bonjour,
j'ai une JWindow en mode pleine écran à laquelle j'ai ajouté un KeyAdapter. Le problème : il semble ne pas fonctionner, en tout cas aucun événement ne semble être détecté, pourquoi ?
Bonjour,
j'ai une JWindow en mode pleine écran à laquelle j'ai ajouté un KeyAdapter. Le problème : il semble ne pas fonctionner, en tout cas aucun événement ne semble être détecté, pourquoi ?
A quoi rajoutes-tu le keylistener ?
Au???
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.getContentPane()
Vérifie également le profil des fonctions dans ton keyAdapter, pour qu'ils correspondent bien au keylistener habituel. Si tu implémentes une fonction qui n'est pas définie dans le keylistener, il n'y aura pas de problème à la compilation, mais pas d'événements générés. Une solution serait de remplacer ton keyAdapter par un keyListener pour vérifier ce cas-là.
j'ai essayé this.addKeyListener(...) et contentPane.addKeyListener(...), mais sans succès. Et pout info, je ne redéfinis que la méthode keyPressed(KeyEvent e) => tout ce qu'il y a de plus basique. C'est curieux non ? J'avais déjà eu le même problème dans une JFrame mais lorsque des composants étaient rajoutés après l'ajout du KeyListener, mais là, aucun élément n'est ajouté.
dans la définition de ta classe JWindow tu mets:
dans le constructeur de ta JWindow tu mets:
Code : Sélectionner tout - Visualiser dans une fenêtre à part public class MonProg extends JWindow implements KeyListener
dans ta classe ensuite tu rajoutes ces 3 méthodes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part addKeyListener(this);
si après ca, ca ne marche pas, c'est que ton probleme vient d'ailleurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void keyPressed( KeyEvent evt ) {} public void keyTyped( KeyEvent evt ) {} public void keyReleased( KeyEvent evt ) {}
voila![]()
je sais comment ajouter un KeyListener, le problème n'est pas là...
tu mets aussi ces méthodes dans ta JWindow ? :Et pout info, je ne redéfinis que la méthode keyPressed(KeyEvent e) => tout ce qu'il y a de plus basique
sinon fais voir une partie ou la totalité de ton code, car la c'est bizarre, normalement ca marche tres bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public void keyTyped( KeyEvent evt ) {} public void keyReleased( KeyEvent evt ) {}![]()
J'ajoute ça au constructeur :
En gros, la seule chose qui se passe sans ma JWindow c'est qu'une boucle infinie appelle repaint() toutes les x millisecondes pour afficher à l'écran le contenu d'un backbuffer...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 this.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if (e.getKeyChar() == 'x'){ System.exit(1); } } });
mm bizarre loooooool ca m'fait beaucoup penser à certains trucs
t'en ferais pas un jeu par hasard ?
en tout cas tu fais quelque chose de très orienté graphisme
tu dois pouvoir faire je pense :
sinon je pencherais pour :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ( e.getKeyCode() == KeyEvent.VK_A )
j'espere que j'ai trouvé ton probleme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 char c; c = e.getKeyChar(); if ( c.equals("x"))![]()
et reponds a ma question
![]()
je n'ai pas l'impression que ma méthode soit fausse car je l'ai toujours utilisée comme ça. J'ai l'impression que le focus n'est pas sur la JWindow et que c'est pour ça que rien ne se passe. En tout cas j'ai essayé tes propositions, la première est équivalente à la mienne et la deuxième est impossible à cause du equals appellé sur le char (ce qui n'a pas de sens vu qu'un type primitif contient directement une valeur et non une référence)
Oui, c'est effectivement un jeu (enfin pour l'instant ça ressemble à rien mais ça viendra
)
essaies en remplacant ta JWindow par une JFrame tout betement mais a mon avis ca changera pas grand chose, ton probleme doit venir d'ailleurs![]()
mais t'arrives à mettre une JFrame en plein écran toi ?![]()
bah bien sur LOOOOOOL !![]()
a mon avis tu dois avoir des problemes avec ton SDK installé ou a la compilation, tentes de reinstall un SDK, sinon au pire j'peux te filer des bouts d'code![]()
a mon avis tu te trompes, une JFrame possède automatiquement une barre en haut avec un bouton fermer, minimiser, maximiser et un titre...
(et de toute façon le même problème se pose avec une JFrame, donc laissons de côté ce point)
Quand à mon sdk, il marche très bien, j'en suis sûr![]()
sur ta JFrame tu mets dans son constructeur la fonction:
et apres y'a pu de barre de menu, titre, bordures, bouton réduire/fermer, etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part setUndecorated( true );
différence entre une JFrame et une JWindow :
- la JWindow n'est pas déplacable
- la JWindow n'a pas de bordure
- la JWindow n'a ni barre de titres ni boutons fermer/agrandir/reduire
- la JWindow consomme un peu moins de mémoire (j'ai bien dit un peu !)
deja ton KeyAdapter pour ton KeyListener devrait marcher sur ta JFrame, c'est soit que tu as oublié un détail, soit que tu as un probleme de SDK, je ne vois que ca
perso, sur ma JFrame en plein écran, j'ai un KeyListener et un MouseListener et j'ai aucun probleme et j'suis en Java_1.4.1_05
si tu l'souhaites je peux te filer mon code pour mettre une JFrame en plein écran, c'est pas sorcier et tu pourrais te rendre compte que ca vient de chez toi
![]()
ok, alors finalement c'était bien un problème de JWindow. J'ai transformé en JFrame plein écran et ça marche.
Merci pour ton aide narkotik![]()
Partager