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つのシェルのいずれかを活性化させます。
[ShellListener.shellActivated()]を使用することはできません(http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi %2Forg%2Feclipse%2Fswt%2Fevents%2FShellListener.html)?他のシェル?このイベントは、シェルがアクティブなウィンドウになるとトリガーされます。 –
はい、これは私が今使っている回避策です。私はきれいな解決策を探しています。 – Skip