2010-08-16 2 views
4

RCP 응용 프로그램에서는 현재 포커스에 관계없이 고급 키 이벤트 처리/라우팅을 위해 Display.addFilter()를 통해 전역 키 이벤트 핸들러를 사용해야합니다. 대화 상자가 현재 일부 라우팅 논리에 대해 열려 있는지 확인할 수 있어야합니다.JFace 또는 SWT 대화 상자가 현재 열려 있는지 확인하는 방법은 무엇입니까?

꽤 사소한 질문처럼 보이지만 위젯 계층, 쉘, WindowManagers에서 막 다른 골목을 지키고 있습니다.

Dialog 구현 자나 표준 프레임 워크 대화 상자를 사용하는 클라이언트 코드에서 추가 작업이 필요없는 강력한 솔루션을 찾고 있습니다.

답변

2

아래 예제에서 shell은 범위에 정의 된 셸입니다. activeShell과 쉘 목록을 비교하는 코드를 수정할 수 있습니다.

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(); 
      } 
     } 
    } 
}); 

이 예제 코드는 + W는 Mac에서 눌렀을 때 shell을 닫습니다.

+0

getActiveShell()이 내가 찾던 정보의 핵심 비트였습니다. 우리의 구체적인 경우, 우리는 모든 워크 벤치 창에 대한 쉘을 비교할 수 있습니다. 감사! –

관련 문제