2012-10-24 4 views
-1

Je travaille sur l'implémentation de raccourcis clavier sur un panneau qui écoute si les touches fléchées sont enfoncées ou non.Les raccourcis clavier ne fonctionnent pas Java Swing

Si elles sont pressées, elles font une action. Mon code:

private void createKeyBindings(){ 
     actionMap = this.getActionMap(); 
     inputMap = this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
     this.getInputMap().put(KeyStroke.getKeyStroke("a"), 
       "pressedUpArrow"); 
     this.getInputMap().put(KeyStroke.getKeyStroke("released UP"), 
       "releasedUpArrow"); 
     this.getActionMap().put("pressedUpArrow", 
       new PressedUpArrowAction()); 
     this.getActionMap().put("releasedUpArrow", 
       new ReleasedUpArrowAction()); 
    } 

Les actions fonctionnent (quand je les associez à un bouton et appuyez sur le bouton, il fait ce que l'action est censé faire).

Ces raccourcis clavier sont appelés pour mon panneau (qui est un onglet dans un onglet). J'ai essayé les deux avec la touche pressée vers le haut et juste un (pour s'assurer que ce n'est pas le problème). Je tape ces touches lorsque l'onglet en question est au point.

Un conseil?

+2

s'il vous plaît où est sortie à l'interface graphique, pour une meilleure aide plus tôt un post [SSCCE] (http://sscce.org/) – mKorbel

+2

en plus de la réponse par @Stephen - dans l'extrait ci-dessus vous enregistrez les frappes avec le mauvais inputMap: remplace this.getInputMap(). put (..) avec inputMap.put (...) – kleopatra

+0

Merci, corrigé ça mais ça ne l'a pas résolu. Il n'y a aucune sortie vers l'interface graphique. PressedUpArrowAction momentanément imprime simplement un message d'erreur. L'action fonctionne, car lorsque je la lie à une clé (à l'aide de setAction), elle fonctionne lorsqu'elle est pressée. – Sven

Répondre

3

Une cause possible de votre problème est le suivant:

this.getInputMap().put(KeyStroke.getKeyStroke("a"), 
      "pressedUpArrow"); 

devrait-il pas cela?

this.getInputMap().put(KeyStroke.getKeyStroke("UP"), 
      "pressedUpArrow"); 

La façon dont vous avez actuellement il avons écrit, le feu PressedUpArrowAction() et ReleasedUpArrowAction() sur la presse d'une clé et la libération d'une clé différente.

+0

Oui, le a était juste pour tester si ce n'était pas la cause de l'utilisation abusive de la touche Haut. – Sven

Questions connexes