5

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

我试过shellListener.shellDeactivated()了,但是这个事件被触发了,当 shell 失去对它自己的控件的关注时,意味着当活动 shell 中的控件被单击时。

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

有任何想法吗?

4

1 回答 1

4

假设您有三个 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

于 2012-11-16T09:44:07.390 回答