当用户切换到另一个shell时,我需要知道,点击它。
我尝试了shellListener.shellDeactivated()
但是当shell将焦点放在它自己的控件上时触发了这个事件,这意味着当单击活动Shell中的Control时。
这不是预期的行为,因为我需要知道,当另一个Shell被激活时,而不是我的。
任何想法?
答案 0 :(得分:4)
我们假设你有三个炮弹。主壳和两个壳可以从主壳打开。
因此,当另一个shell被激活时,应该通知主shell。 您可以添加一个等待特定事件类型的侦听器(在主shell中):
shell.addListener(SWT.Show, new Listener() {
@Override
public void handleEvent(Event e) {
System.out.println("activated: " + e.text);
}
});
其他shell应该在激活时触发(notify
)此事件。为此,您将shell侦听器添加到其他两个shell,并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);
}
}
});
当您激活其他两个shell之一时,将通过事件类型SWT.Show
通知主shell。