2012-11-15 7 views
5

ユーザーが別のシェルに切り替えると、そのシェルをクリックして知る必要があります。SWT - シェルユーザーが別のシェルに切り替えたかどうかを確実に知るイベント

私はshellListener.shellDeactivated()を試しましたが、このイベントは、シェルが自分のコントロールにフォーカスを失ったときに起動されます。つまり、アクティブなシェルのコントロールがクリックされたときです。

これは、私の代わりに別のシェルが起動されたときに知っておく必要があるため、意図した動作ではありません。

すべてのアイデア?

+1

[ShellListener.shellActivated()]を使用することはできません(http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi %2Forg%2Feclipse%2Fswt%2Fevents%2FShellListener.html)?他のシェル?このイベントは、シェルがアクティブなウィンドウになるとトリガーされます。 –

+0

はい、これは私が今使っている回避策です。私はきれいな解決策を探しています。 – Skip

答えて

4

3つのシェルがあるとします。メインシェルとメインシェルから開くことができる2つのシェル。

したがって、別のシェルがアクティブになったときにメインシェルに通知する必要があります。彼らがアクティブしまったときに、他のシェルがこのイベントを(notify)を発射する必要があります

shell.addListener(SWT.Show, new Listener() { 

     @Override 
     public void handleEvent(Event e) { 
      System.out.println("activated: " + e.text); 
     } 
    }); 

: あなたは(メインシェルで)特定のイベントタイプを待機するリスナーを追加することができます。そのためには、シェルリスナーを他の2つのシェルに追加し、fireのメソッドのshellActivated()のイベントをo.notifyListeners();に追加します。

shell.addShellListener(new ShellAdapter() { 
     @Override 
     public void shellActivated(ShellEvent e) { 
      Shell shellSrc = (Shell) e.getSource(); 
      Display display = shellSrc.getDisplay(); 

      Event event = new Event(); 
      event.type = SWT.Show; 
      event.text = "other shell 1"; 

      Shell[] shells = display.getShells(); 
      for(Shell o : shells) { 
       o.notifyListeners(SWT.Show, event); 
      } 
     } 
    }); 

あなたはメインシェルは、イベントタイプSWT.Showで通知されます、他の2つのシェルのいずれかを活性化させます。

関連する問題