2013-08-06 81 views
0

如何更改此代碼以接受任何密鑰(不僅F5)並打印密鑰?Java Swing獲得輸入

component.getRootPane().getInputMap(JRootPane.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0), "F5 Pressed"); 
component.getRootPane().getActionMap().put("F5 Pressed", new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     // Code here 
    } 
}); 
+0

你可能會尋找一個['DocumentListener'](http://docs.oracle.com/javase/tutorial /uiswing/events/documentlistener.html)。 – trashgod

+1

你不能 - 鍵綁定是用於_specific_keyStrokes。你想實現什麼? – kleopatra

+0

好像你想要在鍵盤上添加每個按鍵來映射這個組件。與此同時,你想要用最少的代碼完成它。我希望我寫下描述你的情況。請將__cahnhe__替換爲___change___,好像你打算寫後者,但輸入前者:-) –

回答

1

使用KeyboardFocusManager註冊一個KeyEventDispatcher

KeboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {  
    @Override 
    public boolean dispatchKeyEvent(KeyEvent ke) { 
     if (yourComponent.hasFocus && ke.getID == KeyEvent.KEY_TYPED) { 
      // Your code here 
      // Use ke.getKeyChar() to detect which key was pressed. 
     } 
    } 
}