2009-09-20 14 views
0

Comment est-ce que je remappe une clef sur le clavier en utilisant Java afin que je puisse donner à la clef une nouvelle signification?Comment remapper une touche du clavier en utilisant Java Swing?

+0

Est-ce que cette option est utilisée uniquement dans votre programme? Comme dans les jeux (modifier les contrôles). Ou voulez-vous dire l'ensemble de la configuration du clavier? –

+0

@MartijnCourteaux je cherche quelque chose à remapper ma clé de pageup à (ctrl + win + left) et pagedown à (crl + win + right) –

+0

@KoenVanLooveren: Sur OS X, recherche de Karabiner. Pour d'autres plateformes, je suppose que des applications similaires existeront. –

Répondre

-2

événements clés de capture:

java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(myListener, AWTEvent.KEY_EVENT_MASK); 

Simuler sur la touche:

java.awt.Robot.keyPress(myKeyCode); 
+0

et que ferez-vous avec cette touche une fois que vous l'avez capturé? – kdgregory

+0

Obtenez la clé tapée et remappez-la à la vôtre. N'est-ce pas ce qui a été demandé? – Witek

0

ne comprennent pas vraiment le contexte de votre question. Mais en théorie, vous pouvez intercepter tous les KeyEvents et ensuite envoyer un KeyEvent différent en fonction de vos critères. Global Event Dispatching pourrait vous donner quelques idées.

1

Si je comprends bien la question, c'est comment définir explicitement le comportement d'une clé spécifique. Voici comment je fais cela pour implémenter des raccourcis clavier - j'espère que cela répond à votre question. Dans mon exemple ci-dessous, je crois que vous pouvez changer 'ceci' pour être le composant spécifique sur lequel vous souhaitez explicitement définir le comportement du clavier, en remplaçant son comportement par défaut. Je le fais habituellement dans le contexte d'un panneau ou d'un cadre.

private void addHotKey(KeyStroke keyStroke, String inputActionKey, Action listener) { 
    ActionMap actionMap = this.getActionMap(); 
    InputMap inputMap = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 
    inputMap.put(keyStroke, inputActionKey); 
    actionMap.put(inputActionKey, listener); 
} 

L'argument inputActionKey est simplement une chaîne de clé arbitraire à utiliser pour mapper l'action. Un exemple d'appel de cette méthode pour écouter la clé DEL:

KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0); 
    Action listener = new AbstractAction() { 
     public void actionPerformed(ActionEvent e) { 
      // delete something... 
     } 
    }; 
    addHotKey(keyStroke, "MainWindowDEL", listener); 
Questions connexes