KeyListener JFrame avec plusieurs composants

mouss11 Messages postés 43 Date d'inscription mercredi 22 mai 2002 Statut Membre Dernière intervention 29 octobre 2007 - 17 juin 2004 à 17:04
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 19 juin 2004 à 16:33
Bonjour,
J'ai une JFrame avec plusieurs composant dedans, par exemple une JList et des JButtonRadio.
J'ai un JButton OK et un Cancel
J'aimerai que l'appuie sur la touche "Entrer" appel ma fonction pour valider le formulaire (celle appelé par mon JButton OK)
et pareil pour Cancel avec la touche Escape
Seulement si je met un KeyListener sur mon JFrame et que l'un des composants à le focus ça ne marche pas, du coup je suis obligé de mettre un KeyListener pour chaque composant, très lourd quand il y en a beaucoup.
J'espère que c'est possible ???
Merci d'avance, ++
Mouss

11 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
17 juin 2004 à 20:16
GodConan :clown)

utilise un keyStroke (racoursi au nivo de l appli)
0
mouss11 Messages postés 43 Date d'inscription mercredi 22 mai 2002 Statut Membre Dernière intervention 29 octobre 2007
17 juin 2004 à 20:39
Ah ok je ne connaissais pas, je vais voir ça
Merci beaucoup
0
mouss11 Messages postés 43 Date d'inscription mercredi 22 mai 2002 Statut Membre Dernière intervention 29 octobre 2007
18 juin 2004 à 09:05
Arf, je comprends pas comment ça marche. Il faut que j'implémente KeyListner ? et après KeyStrole ne propose que des méthodes get. Comment je crée une méthode qui sera appelé sur un évenement KeyStroke.
J'espère que tu pourras m'aider un peu
Merci d'avance
Mouss
0
indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
18 juin 2004 à 11:16
Bonjour
Il y a bien une autre solution, mais faudra vérifier qu'elle marche bien. Pour les composants SWING, la plupart posséde la méthode setMnemonic, qui permet de déclencher l'événement en appuyant sur une touche. Elle peut prendre comme paramétre, soit un char, soit un entier. Mais comme tu veux utiliser des touches comme "Echap", il faudra que tu utilises des entiers

Dans ton cas, il faudra probablement faire:

JButton b = new JButton("OK");
b.setMnemonic(KeyEvent.VK_ENTER); //Bouton Enter

JButton p = new JButton("Cancel");
p.setMnemonic(KeyEvent.VK_ESCAPE); //Bouton Echap


Voilà, en espérant que ça marche bien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mouss11 Messages postés 43 Date d'inscription mercredi 22 mai 2002 Statut Membre Dernière intervention 29 octobre 2007
18 juin 2004 à 11:31
Je viens d'essayer mais ça marche pas :(
Dommage ça avait l'air super ton truc
Merci quand même d'avoir essayer :)
J'espère que je vais trouver la solution, je continue de chercher du côté de KeyStroke
0
mouss11 Messages postés 43 Date d'inscription mercredi 22 mai 2002 Statut Membre Dernière intervention 29 octobre 2007
18 juin 2004 à 11:40
J'ai trouvé ! enfin
voilà la méthode à rajouter pour ceux que ça intéresse

protected JRootPane createRootPane()
{
ActionListener actionListenerForCancel= new ActionListener()
{
public void actionPerformed(ActionEvent actionEvent)
{
dispose();
}
};
ActionListener actionListenerForOK= new ActionListener()
{
public void actionPerformed(ActionEvent actionEvent)
{
valider();
}
};
KeyStroke strokeCancel= KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
KeyStroke strokeOK= KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
JRootPane rootPane= new JRootPane();
rootPane.registerKeyboardAction(
actionListenerForCancel,
strokeCancel,
JComponent.WHEN_IN_FOCUSED_WINDOW);
rootPane.registerKeyboardAction(
actionListenerForOK,
strokeOK,
JComponent.WHEN_IN_FOCUSED_WINDOW);
return rootPane;
}
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
18 juin 2004 à 23:32
GodConan :clown)

mais bon fait gaf faut pas en abuser ;o) normalement vaut mieu use les listener ;o)

...
0
mouss11 Messages postés 43 Date d'inscription mercredi 22 mai 2002 Statut Membre Dernière intervention 29 octobre 2007
18 juin 2004 à 23:46
Pourquoi faut pas en abuser ? Je vais pas mettre des listener sur chaque composant pour juste valider ou quitter une fenetre
Merci de m'expliquer ton point de vu
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
19 juin 2004 à 10:20
GodConan :clown)

ben deja pour la clarté du code ;o) et la porter du raccourci c vraiment toute l appli dc souvent c chiant ;o) (si un objet doit reagir differement par exemple)...

et une appli ;o) correctement definit ;o) ne posede pas 200 fenetre ;o) héhé...

et les listner tu n est pas obliger dans instancier 200 nom plus 1 seul suffit avec le passge de reference aux objets consernés ;o)

En bref c surtout pour le suivi (maintenance) que je prefere les listeners ;o)..

Mais bon ;o) du moment que tu a le resultat atendu ;o) ... tu verras les prob au fure et a mesure ...

++

GL
0
mouss11 Messages postés 43 Date d'inscription mercredi 22 mai 2002 Statut Membre Dernière intervention 29 octobre 2007
19 juin 2004 à 12:18
En fait j'ai l'appli elle même (fenetre principal) qui ne dispose pas de bouton OK/Cancel donc celle-ci dispose de listener pour ces composants respectifs.
Par contre j'ai 3-4 fenêtres (des formulaires en quelques sortes) avec des boutons OK/Cancel.
Et de toute façon je dois suivre le cahier des charges de l'entreprise, héhé :) et grâce à cette méthode c'est impec.
Merci à tous et à très bientôt car je vais avoir une question à poser très bientôt :big)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
19 juin 2004 à 16:33
GodConan :clown)

GL

++
0