récupérer les évènements clavier - Java - Programmation
Marsh Posté le 26-03-2003 à 14:08:57
ReplyMarsh 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.
Marsh Posté le 26-03-2003 à 14:12:51
vink a écrit : Qu'est-ce que c'est ?? |
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)
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é ?
Marsh Posté le 26-03-2003 à 14:42:21
vink a écrit : OK, |
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
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 ?
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. |
Ben avant, c'est plus logique a mon avis ...
Marsh Posté le 26-03-2003 à 15:16:31
Ok, c'est bon ça fonctionne.
Merci à tous
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!)
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...
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 ...
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
sioux ? non
Marsh Posté le 26-03-2003 à 16:10:35
Predicator a écrit : concrètement |
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 ?
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
EDIT :
bah ça marche bien
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.
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!
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 )
sur ce, bonne nuit !
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, |
Ouais, j'y ai pensé aussi, mais tu fais comment pour effacer les caracteres ?
Marsh Posté le 27-03-2003 à 18:41:27
bobuse a écrit : |
c'est vrai ca, j'y ai pas pensé...
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
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é...
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