2015-10-09 64 views
0

目前我正在嘗試將MKYong的KeyListener example整合到Eclipse RCP應用程序中。KeyListener只在點擊按鈕後纔開始收聽

我從Button得到一些奇怪的行爲我正在註冊KeyListener,它只在第一次點擊按鈕後纔開始收聽鍵盤輸入。

我想它來聽所有的鍵盤事件被創建後發生。對我來說,我不得不使用什麼樣的SWT Control

任何想法表示讚賞。

回答

2

控件只有獲得鍵盤焦點時的按鍵事件。

如果你想獲得你可以使用的Display

Display.getDefault().addFilter(SWT.KeyDown, new Listener() { 
    public void handleEvent(Event event) 
    { 
    // Handle key down event 
    } 
}); 
+2

請記住,當你」來刪除該過濾器重新聽完,否則你的整個應用程序將是越野車。 – GGrec

1

您已經添加的KeyListener到按鈕的addFilter方法的所有重要事件。當keyEvent獲得焦點時,會通知Button。如果你想在你的整個窗口監聽鍵盤事件,然後添加的KeyListener到shell:

shell.addKeyListener(new KeyAdapter()... 

如果你想全球的KeyListener添加顯示過濾器:

Listener listener = new Listener() { 

    @Override 
    public void handleEvent(Event e) { 
     if(e.type == SWT.KeyDown||e.type == SWT.KeyUp) { 
      System.out.println("" + e.keyCode); 
     } 
    } 
}; 
display.addFilter(SWT.KeyDown, listener); 
display.addFilter(SWT.KeyUp, listener);