【问题标题】:How to determine that a JFace or SWT Dialog is currently open?如何确定 JFace 或 SWT 对话框当前是否打开?
【发布时间】:2010-08-17 07:42:59
【问题描述】:

在我们的 RCP 应用程序中,我们需要使用全局键事件处理程序(通过 Display.addFilter())来进行更高级的键事件处理/路由,而与当前焦点无关。我们需要能够确定当前是否为某些路由逻辑打开了一个对话框。

似乎是一个相当微不足道的问题,但我一直在 Widget 层次结构、Shell、WindowManagers 中遇到死胡同。

我正在寻找一种强大的解决方案,它不需要对话框实施者或使用标准框架对话框的客户端代码进行任何额外工作。

【问题讨论】:

    标签: dialog swt eclipse-rcp jface


    【解决方案1】:

    在下面的示例中,shell 是作用域中定义的 Shell。您可以修改代码以将 activeShell 与 Shell 列表进行比较。

    shell.getDisplay().addFilter(SWT.KeyDown, new Listener() {
        public void handleEvent(final Event event) {
            if (shell.isDisposed()) {
                return;
            }
            final Shell activeShell = shell.getDisplay().getActiveShell();
            if (activeShell != null && activeShell.equals(shell)) {
                if (event.stateMask == SWT.MOD1 && event.character == 'w') {
                    shell.dispose();
                }
            }
        }
    });
    

    当在 Mac 上按下 +W 时,此示例代码将关闭 shell

    【讨论】:

    • getActiveShell() 是我正在寻找的关键信息。在我们的特定情况下,我们可以将所有工作台窗口的 shell 与其进行比较。谢谢!
    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多