2009-09-20 103 views
0

如何使用Java重新映射鍵盤上的某個鍵,以便我可以給鍵賦予新的含義?如何使用Java Swing重新映射鍵盤鍵?

+0

這是僅用於您的程序嗎?就像在遊戲中一樣(編輯控制列表)。或者你的意思是整個系統鍵盤佈局? – 2009-09-20 15:44:13

+0

@MartijnCourteaux我正在尋找一些東西來重新映射我的pageup鍵到(ctrl + win + left)和pagedown到(crl + win + right) – 2015-10-28 12:45:06

+0

@KoenVanLooveren:在OS X上,搜索Karabiner。對於其他平臺,我猜想類似的應用程序將存在。 – 2015-10-28 12:50:50

回答

-2

拍攝鍵事件:

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

模擬按鍵:

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

一旦你捕獲它,你將如何處理這個按鍵? – kdgregory 2009-09-21 12:06:16

+0

獲取輸入的密鑰並將其重新映射到您自己的密鑰。這不是要求的嗎? – Witek 2009-09-21 14:16:51

0

真的不明白你的問題的情況下。但理論上,您可以截取所有KeyEvent,然後根據您的條件派發不同的KeyEvent。 Global Event Dispatching可能會給你一些想法。

1

如果我明白這個問題,那就是如何明確定義特定鍵的行爲。以下是我如何實現鍵盤快捷鍵 - 希望它可以回答你的問題。在我的下面的例子中,我相信你可以將'this'改爲你希望顯式設置鍵盤行爲的特定組件,並覆蓋其默認行爲。我通常在面板或框架的背景下這樣做。

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); 
} 

inputActionKey只是一個用於映射操作的任意鍵字符串。調用此方法來偵聽DEL鍵的示例:

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