Java GUI 的鍵盤監聽事件
在實作 Java GUI 的鍵盤事件時,可能會遇到一直監聽不到的問題因為 JFrame 如果有子元件,focus 的狀態就會被傳遞到子元件上
此時就會因為 JFrame 一直不會被 focus,因此也不會觸發 JFrame 上的鍵盤事件。
[1] 提供了攔截 Key Listener 的方法,可以在 GUI 上註冊全域的鍵盤事件
無論目前 focus 的是 GUI 中的哪一個元件,都能夠觸發鍵盤事件。
//Hijack the keyboard manager
KeyboardFocusManager manager =
KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventDispatcher( new KeyDispatcher() );
//Custom dispatcher
class KeyDispatcher implements KeyEventDispatcher {
public boolean dispatchKeyEvent(KeyEvent e) {
if(e.getID() == KeyEvent.KEY_TYPED)
System.out.println( "typed" + e.getCharCode() )
//Allow the event to be redispatched
return false;
}
}
不過如果需求是要攔截作業系統上所有的鍵盤事件(無論 Java GUI 是否處於 focus 狀態)
則依照 [2] 的回應,這不存在純 Java 的解法,還是必須透過作業系統那邊的方法來傳遞狀態。
以上轉載自
黑毛到白毛的攻城獅之路
http://jimwayne.blogspot.tw/2012/09/java-gui.html
沒有留言 :
張貼留言