récupérer les évènements clavier

récupérer les évènements clavier - Java - Programmation

Marsh Posté le 26-03-2003 à 14:04:08    

Après une recherche sur le forum, je n'ai pas trouvé de réponse à la question suivante.
 
J'ai un JLabel sur lequel il y a un MouseListener --> ça, ça marche.
Je voudrais y ajouter un KeyListener, mais là, quoi que je fasse, j'ai beau appuyer sur n'importe quelle touche il ne se passe rien.
 
Le JLabel contient une image. Le MouseListener permet d'obtenir l'emplacement de la souris sur l'image.
Et je voudrais qu'en appuyant sur certaines touches, le programme effectue certaines opérations. Et pour cela, il faudrait qu'il récuppère toutes les informations venant du clavier.
Comment puis-je faire ?
 
Merci


---------------
Nos seules limites sont celles que nous nous imposons
Reply

Marsh Posté le 26-03-2003 à 14:04:08   

Reply

Marsh Posté le 26-03-2003 à 14:07:38    

et avec un requestFocus sur ton panel ?

Reply

Marsh Posté le 26-03-2003 à 14:08:57    

vink a écrit :


Je voudrais y ajouter un KeyListener,  


Et tu t'as pris comment?

Reply

Marsh Posté le 26-03-2003 à 14:10:46    

Qu'est-ce que c'est ??
 
En fait, la récupération des évènements clavier n'a pas besoin d'être rattachée au JPanel.
A partir du moment où l'application est lancée, il faudrait que toute touche enfoncée soit récupérée.


---------------
Nos seules limites sont celles que nous nous imposons
Reply

Marsh Posté le 26-03-2003 à 14:12:51    

vink a écrit :

Qu'est-ce que c'est ??
 
En fait, la récupération des évènements clavier n'a pas besoin d'être rattachée au JPanel.
A partir du moment où l'application est lancée, il faudrait que toute touche enfoncée soit récupérée.


Les evenements clavier sont chopes par le composant qui a le focus ... donc pour pour que ca marche, il faut que tu force en faisant un requestFocus() sur ton composant (comme te l'as dit noldor)


---------------
get amaroK plugin
Reply

Marsh Posté le 26-03-2003 à 14:24:28    

OK,
Donc maintenant, j'ai un truc dans ce style:
 
monLabel.addMouseListener(new MouseListener());
monLabel.requestFocus();
monLabel.addKeyListener(new KeyListener());
 
Mais ça ne réagit toujours pas. Qu'ai-je oublié ?


---------------
Nos seules limites sont celles que nous nous imposons
Reply

Marsh Posté le 26-03-2003 à 14:42:21    

vink a écrit :

OK,
Donc maintenant, j'ai un truc dans ce style:
 
monLabel.addMouseListener(new MouseListener());
monLabel.requestFocus();
monLabel.addKeyListener(new KeyListener());
 
Mais ça ne réagit toujours pas. Qu'ai-je oublié ?


Il est fait quand ton requestFocus par rapport au reste des opérations ? (construction de la fenetres, ...)
Si tu le fais en tout dernier, ca doit marcher


---------------
get amaroK plugin
Reply

Marsh Posté le 26-03-2003 à 14:45:45    

Le requestFocus est fait à la fin de la création de la fenêtre.
Le addKeyListener doit être fait avant ou après le requestFocus ?


---------------
Nos seules limites sont celles que nous nous imposons
Reply

Marsh Posté le 26-03-2003 à 14:55:03    

vink a écrit :

Le requestFocus est fait à la fin de la création de la fenêtre.
Le addKeyListener doit être fait avant ou après le requestFocus ?


Ben avant, c'est plus logique a mon avis ...


---------------
get amaroK plugin
Reply

Marsh Posté le 26-03-2003 à 15:16:31    

Ok, c'est bon ça fonctionne.
Merci à tous ;)


---------------
Nos seules limites sont celles que nous nous imposons
Reply

Marsh Posté le 26-03-2003 à 15:16:31   

Reply

Marsh Posté le 26-03-2003 à 15:19:39    

ben le problème avec cette méthode, c'est que dès qu'un autre objet  prend le focus, ben le clavier il fait plus rien.
 
Si tu veux que ton applis face réagisse de la même façon au clavier, quel que soit le component qui a le focus; tu dois faire un addKeyListener(KeyList) sur chaque component qui pourrait avoir le focus. (tu créé qu'un seul KeyListener que tu met à tous les components, ca sert à rien d'en faire 50!)


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 26-03-2003 à 15:30:56    

y'a-t-il une solution par exemple pour associer un MouseListener à un JPanel "a", et en associer un autre à un JPanel "b" inclu dans "a" ?
 
j'ai essayé sans sucès. j'imagine que Java se paume, mais ce serait quand même bien pratique...

Reply

Marsh Posté le 26-03-2003 à 15:53:38    

Ben tu peux en faire un seul pour a, et faire un traitement diffrérent si tu es sur b ... mais bon, ya ptet une meilleure sol ...


---------------
get amaroK plugin
Reply

Marsh Posté le 26-03-2003 à 16:02:22    

concrètement
 
j'ai un JPanel ensembleImage
 
ce panel contient n JPanel imagePanel
 
chaque imagePanel possède son propre MouseListener et son propre MouseMotionListener, pour permettre de créer des formes géométriques...
 
je voudrais ajouter un MouseMotionListener à ensImagePanel pour dessiner un rectangle sous la souris (par exemple pour montrer la zone qui sera zoomée)
 
je l'ai fais, et ce qui se passe, c'est que le MouseMotionListener de ensImagePanel ne réagit que dans la zone qui sépare chaque ImagePanel :sarcastic:  
 
sioux ? non [:zebra33]


Message édité par Predicator le 26-03-2003 à 16:02:38
Reply

Marsh Posté le 26-03-2003 à 16:10:35    

Predicator a écrit :

concrètement
 
j'ai un JPanel ensembleImage
 
ce panel contient n JPanel imagePanel
 
chaque imagePanel possède son propre MouseListener et son propre MouseMotionListener, pour permettre de créer des formes géométriques...
 
je voudrais ajouter un MouseMotionListener à ensImagePanel pour dessiner un rectangle sous la souris (par exemple pour montrer la zone qui sera zoomée)
 
je l'ai fais, et ce qui se passe, c'est que le MouseMotionListener de ensImagePanel ne réagit que dans la zone qui sépare chaque ImagePanel :sarcastic:  
 
sioux ? non [:zebra33]


Et tu peux pas au moment ou tu cliques dans ton EnsImaPanel, virer tous les autres, et les remettre a la fin ?
 
Enfin c'est crade mais bon ... si ca marchait ?


---------------
get amaroK plugin
Reply

Marsh Posté le 26-03-2003 à 16:18:54    

ça pourrait marcher, à condition que les évènement soient lancés du composant le plus haut au composant le plus bas...
 
mais c'est une excellente idée, j'ai une autre méthode pour désactiver les listener des imagePanel...
 
je reviens dans 30 secondes ;)
 
merci pour m'avoir fait penser à ce truc tout con :sweat:
 
EDIT :
 
bah ça marche bien [:xp1700]


Message édité par Predicator le 26-03-2003 à 17:08:30
Reply

Marsh Posté le 27-03-2003 à 05:22:17    

Salut, plutot que de recreer un topic, je continue sur celui-ci. Je cherche egalement a recuperer des evenements claviers, mais mon application n'est pas graphique. Grosso modo, c'est une interface en ligne de commande pour dialoguer avec une BDD. Je voudrais intercepter les appuis sur la touche TAB pour faire de la completion automatique (a l'instar des interfaces ligne de commandes de PostgreSQL, MySQL et surement d'autre).  
Le gros probleme, c'est que les seuls objets qui "ecoutent" le claviers sont les composants AWT... Y'en a qui auraient des idees ? ca fait deux jours que je planche, j'essaie des trucs, mais rien.
 
 :(

Reply

Marsh Posté le 27-03-2003 à 18:24:38    

bah, tu lis sur l'entrée standart (System.in) les caractères tapés, si c'est un tab tu fais ton autocomplétion,  
pas besoin d'un keyListener!


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 27-03-2003 à 18:32:42    

ben non, quand on lit sur l'entree standard, d'une part les caracteres sont affiches, ensuite, pour pouvoir lire, il faut valider la ligne par un retour chariot... donc marche pas. Mais si vous avez d'autres idees, vu que j'ai fait un autre topic (c'est pas vraiment le meme probleme que celui traite ici) mieux vaut repondre dans l'autre. Mais merci pour ton aide tout de meme :o)
sur ce, bonne nuit !

Reply

Marsh Posté le 27-03-2003 à 18:33:39    

deltaden a écrit :

bah, tu lis sur l'entrée standart (System.in) les caractères tapés, si c'est un tab tu fais ton autocomplétion,  
pas besoin d'un keyListener!


Ouais, j'y ai pensé aussi, mais tu fais comment pour effacer les caracteres ?


---------------
get amaroK plugin
Reply

Marsh Posté le 27-03-2003 à 18:41:27    

bobuse a écrit :


Ouais, j'y ai pensé aussi, mais tu fais comment pour effacer les caracteres ?


c'est vrai ca, j'y ai pas pensé...


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 27-03-2003 à 18:47:45    

et puis meme, avec l'entree standard, on ne recupere pas les caracteres 1 par 1, on choppe tout le paquet jusqu'au retour chariot, ca fonctionne comme un buffer grosso modo. des qu'on appuie sur entree, on a acces au "buffer" (=entree standard) mais pas avant  :sleep:  ;)

Reply

Marsh Posté le 27-03-2003 à 18:52:30    

:o


---------------
get amaroK plugin
Reply

Marsh Posté le 27-03-2003 à 23:24:31    

c'est vrai que c'était complètement débile mon idée de System.in
j'ai pas du assez dormir la nuit passé...


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed