keyListener pour fermer une fenêtre avec ESC ou ENTER
3 réponses
LR
Salut,
Je cherche un moyen d'écouter EFFICACEMENT lorsque l'utilisateur presse
escape ou entrée sur son clavier afin de pouvoir fermer mes dialog.
J'avais fait
this.addKeyListener(
new KeyListener()
{
public void keyPressed( KeyEvent e )
{
if ( e.getKeyCode() == KeyEvent.VK_ENTER )
close( true );
else if ( e.getKeyCode() ==
KeyEvent.VK_ESCAPE ) close( false );
}
public void keyReleased( KeyEvent e ) {}
public void keyTyped( KeyEvent e ) {}
}
);
sur une JDialog mais le résultat est décevant (ça fonctionne irrégulièrement
en fonction des VM etc.).
Comment faire pour que ça marche aussi bien que sur le JFileChooser( j'ai
pas trouvé comment ils gèrent ça dans le code) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
François Cheippe
Je cherche un moyen d'écouter EFFICACEMENT lorsque l'utilisateur presse escape ou entrée sur son clavier afin de pouvoir fermer mes dialog.
J'avais essayé, sans succès, car le keylistener doit être rattaché à un objet graphique. Si tu le rattaches à la fenêtre (ce qui semble logique) mais que le focus se trouve sur un bouton, un champ de saisie, etc. , alors l'appui su ESC ne sera pas intercepté...
Si quelqu'un a une soultion élégante (éviter de déclarer un keylistener pour chaque composant graphique de la fenêtre), je suis également preneur...
-- François
Je cherche un moyen d'écouter EFFICACEMENT lorsque l'utilisateur presse
escape ou entrée sur son clavier afin de pouvoir fermer mes dialog.
J'avais essayé, sans succès, car le keylistener doit être rattaché à un
objet graphique. Si tu le rattaches à la fenêtre (ce qui semble logique)
mais que le focus se trouve sur un bouton, un champ de saisie, etc. , alors
l'appui su ESC ne sera pas intercepté...
Si quelqu'un a une soultion élégante (éviter de déclarer un keylistener pour
chaque composant graphique de la fenêtre), je suis également preneur...
Je cherche un moyen d'écouter EFFICACEMENT lorsque l'utilisateur presse escape ou entrée sur son clavier afin de pouvoir fermer mes dialog.
J'avais essayé, sans succès, car le keylistener doit être rattaché à un objet graphique. Si tu le rattaches à la fenêtre (ce qui semble logique) mais que le focus se trouve sur un bouton, un champ de saisie, etc. , alors l'appui su ESC ne sera pas intercepté...
Si quelqu'un a une soultion élégante (éviter de déclarer un keylistener pour chaque composant graphique de la fenêtre), je suis également preneur...
-- François
grtdgh
LR wrote:
Salut,
Je cherche un moyen d'écouter EFFICACEMENT lorsque l'utilisateur presse escape ou entrée sur son clavier afin de pouvoir fermer mes dialog. ...
Salut
Il faut utiliser les actions associées au clavier (cherche "Key Bindings" dans le tutorial de sun).
Exemple, où comp est le panel principal de la fenêtre, et btValider et btAnnuler deux boutons de la boite de dialogue :
Action valideAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { btValider.doClick(); }}; Action annuleAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { btAnnuler.doClick(); }};
InputMap im comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); im.put(KeyStroke.getKeyStroke("ESCAPE"), "annuleAction"); im.put(KeyStroke.getKeyStroke("ENTER"), "valideAction");
ActionMap am = comp.getActionMap(); am.put("annuleAction", annuleAction); am.put("valideAction", valideAction);
a+ Jacques
LR wrote:
Salut,
Je cherche un moyen d'écouter EFFICACEMENT lorsque l'utilisateur presse
escape ou entrée sur son clavier afin de pouvoir fermer mes dialog.
...
Salut
Il faut utiliser les actions associées au clavier (cherche "Key
Bindings" dans le tutorial de sun).
Exemple, où comp est le panel principal de la fenêtre, et btValider et
btAnnuler deux boutons de la boite de dialogue :
Action valideAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
btValider.doClick();
}};
Action annuleAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
btAnnuler.doClick();
}};
InputMap im comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
im.put(KeyStroke.getKeyStroke("ESCAPE"), "annuleAction");
im.put(KeyStroke.getKeyStroke("ENTER"), "valideAction");
ActionMap am = comp.getActionMap();
am.put("annuleAction", annuleAction);
am.put("valideAction", valideAction);