2010-08-16 53 views
4

在我們的RCP應用程序中,我們需要使用全局鍵事件處理程序(通過Display.addFilter())進行更高級的關鍵事件處理/路由,而不考慮當前焦點。我們需要能夠確定某個對話框當前是否打開了某些路由邏輯。如何確定JFace或SWT對話框當前是否打開?

看起來像一個相當微不足道的問題,但我一直在打破死角結束小部件層次結構,殼,WindowManagers。

我正在尋找一個健壯的解決方案,它不需要使用標準框架對話框的對話框實現者或客戶端代碼的任何額外工作。

回答

2

在下面的示例中,shell是範圍中定義的Shell。您可以修改代碼以將activeShell與Shell列表進行比較。

shell.getDisplay().addFilter(SWT.KeyDown, new Listener() { 
    public void handleEvent(final Event event) { 
     if (shell.isDisposed()) { 
      return; 
     } 
     final Shell activeShell = shell.getDisplay().getActiveShell(); 
     if (activeShell != null && activeShell.equals(shell)) { 
      if (event.stateMask == SWT.MOD1 && event.character == 'w') { 
       shell.dispose(); 
      } 
     } 
    } 
}); 

此示例代碼將關閉shell + W被壓在Mac。

+0

getActiveShell()是我正在尋找的信息的關鍵位。在我們的具體情況中,我們可以比較所有工作臺窗口的shell。謝謝! – 2010-08-17 04:10:45