2015-08-21 4 views
1

Pourquoi KeyStroke.getKeyStroke('h').getKeyCode(); renvoie 0?Pourquoi KeyStroke.getKeyStroke ('h'). GetKeyCode(); retourner 0?

Par exemple:

import javax.swing.KeyStroke; 

public class KeyStrokeTest { 
    public static void main(String[] args) { 
    KeyStroke keyStroke = KeyStroke.getKeyStroke('h'); 
    System.out.println(keyStroke.getKeyCode()); 
    } 
} 

Sorties:

0 

Comment puis-je résoudre ce problème?

Répondre

2

Cette méthode délègue à AWTKeyStroke.getCachedStroke(keychar, VK_UNDEFINED, 0, false);, ce qui signifie que keyCode est défini sur zéro. Elle le fait parce qu'elle ne sait pas ce que vous avez peut-être appuyé sur, Maj par exemple, Ctrl, etc.

La méthode que vous cherchez probablement est getKeyChar(), qui ne renvoie 'h'.

Vous pouvez également appeler KeyStroke.getKeyStroke('h', 0), qui spécifiera les modificateurs et aura donc une valeur correcte KeyCode.

0

Au lieu de KeyStroke.getKeyStroke (char KeyChar), essayez d'utiliser KeyStroke.getKeyStroke (Personnage KeyChar, int modificateurs) avec une valeur de modification de 0. En d'autres termes, utilisez:

KeyStroke.getKeyStroke('h', 0).getKeyCode(); 
+0

il me donne une valeur int 104 mais KeyEvent.VK_H a 72. – EchoCache

+0

Les clés VK ne se soucient pas des majuscules/minuscules, donc elles donnent le code de la majuscule H, qui est 72. 104 est le code des minuscules h. – uoyilmaz