OVH Cloud OVH Cloud

Gestion d'événements

1 réponse
Avatar
JFA
Bonjour
J'ai un Frame contenant une foule de TextFields et TextAreas.
Certains d'entre eux ont un KeyListener, d'autres non.
Je voudrais récupérer globalement un KeyEvent (ex : KeyCode = VK_O pour
ouvrir un FileDialog).
Dois-je ajouter un KeyListener à TOUS mes composants ou existe-t-il une
manière plus globale de récupérer cet événement ?
Le container (Frame) peut-il préfiltrer l'événement, comme le fait
VisualBasic avec form.KeyPreview = true ?
Merci.
jfa

1 réponse

Avatar
burma
Il existe plusieurs solution à ton problème.

- ajoute une listener à ta component racine et récupere l'event lors
qu'il se presente (si tant est qu'il n'a pas déja été consumé)

- ajoute des actionMap et des inputMap à ta compnent racine (à mon avis
c'est le plus élégant)

- recupère le glasspane de ta frame et intercepte l'event dessus.

Y a un trés bon article sur la gestion d'event dans swing sur le site de
sun (cf. http://java.sun.com)

Voila.
Manu


JFA wrote:

Bonjour
J'ai un Frame contenant une foule de TextFields et TextAreas.
Certains d'entre eux ont un KeyListener, d'autres non.
Je voudrais récupérer globalement un KeyEvent (ex : KeyCode = VK_O pour
ouvrir un FileDialog).
Dois-je ajouter un KeyListener à TOUS mes composants ou existe-t-il une
manière plus globale de récupérer cet événement ?
Le container (Frame) peut-il préfiltrer l'événement, comme le fait
VisualBasic avec form.KeyPreview = true ?
Merci.
jfa