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