2014-12-05 73 views
0

我想在Swing中的JComponent上有一個KeyListener,它在按下並釋放ctrl鍵時發生反應。 這是一個天真,但次優解(它反應在每一個按鍵時,CTRL不僅在按下/釋放鍵:JComponent for Ctrl鍵上的KeyListener

new KeyAdapater() { 
    public void keyPressed(KeyEvent e) { 
    if (e.isControlDown()) { 
     //do something 
    } 
    } 
    public void keyReleased(KeyEvent e) { 
    if (!e.isControlDown()) { 
     //do something other 
    } 
    } 
} 

什麼是隻觸發一個更好的辦法,當CTRL關鍵本身按下或釋放

回答

2

試試這個:

public void keyPressed(KeyEvent e) { 
    if (e.getKeyCode() == KeyEvent.VK_CONTROL) { 
     //do something 
    } 
} 
+0

哎呀!過去我曾經使用過這種方法,但只是忘記了。謝謝!那正是我在尋找的。 – radlan 2014-12-05 12:43:02

+1

@radlan'當ctrl鍵本身被按下或釋放時,什麼是更好的方法來觸發?「問題問到什麼是更好的方法。那麼更好的方法是使用密鑰綁定。 Swing被設計爲與鍵綁定一起使用。 「過去我曾經使用過這樣的方法,」現在你知道「更好的方法」,在將來不需要使用這種方法。 – camickr 2014-12-05 15:26:47

4

恕我直言使用Key bindings是更加靈活和可靠的方法帶來以下好處:

說了這麼多,我們可以創建KeyStrokes喜歡如下:

KeyStroke controlKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL, 0); 

我們甚至可以指定擊鍵將在一個鍵釋放事件觸發:

KeyStroke controlReleasedKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL, 0, true); 

注意:0表示沒有修飾符,true是一個標誌,指示th按鍵描邊代表一個關鍵的發佈事件。有關更多詳細信息,請參閱the API

也請參見本主題:Key bindings vs. key listeners in Java,並How to Use Key Bindings教程

+0

謝謝,我也會考慮這個。 – radlan 2014-12-05 12:47:15

相關問題