SWT - 如果shell用户已切换到另一个shell,则可靠地知道事件

时间:2012-11-15 12:17:25

标签: shell focus swt

当用户切换到另一个shell时,我需要知道,点击它。

我尝试了shellListener.shellDeactivated()但是当shell将焦点放在它自己的控件上时触发了这个事件,这意味着当单击活动Shell中的Control时。

这不是预期的行为,因为我需要知道,当另一个Shell被激活时,而不是我的。

任何想法?

1 个答案:

答案 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。