SWT 全局 KeyListener 按钮焦点问题

2023-12-04

对于我的应用程序,我需要空格键来调用独立于焦点小部件的函数,在应用程序中的任何位置,但前提是打开相应的选项卡。我发现可以在显示中添加一个过滤器,如下所示:

 getShell().getDisplay().addFilter(SWT.KeyDown, new Listener() {

            public void handleEvent(Event arg0) {
                if( arg0.character == 32 ) { /**SPACE*/
                    if( mainTabs.getSelection().equals(analyseSoundFilesTab)) {
                        soundController.playButtonClickHandler();
                    }
                }
            }

        });

在大多数情况下,这工作得很好,但是如果我通过“选项卡”或“Shift 选项卡”给按钮焦点,那就有点奇怪了 - 空格键会激活“按下的按钮”,就像点击按钮一样鼠标。我现在有点陷入困境,我不知道如何避免这种情况...... 对于按钮,我实现了一个 SelectionListener。

问候。


您可以使用 TraverseListener 并使用 doin 字段禁用新闻事件检测。这是示例代码:

display.addFilter(SWT.KeyDown, new Listener() {
    public void handleEvent(Event e) {
        if (e.character == 32) {
            System.out.printf("Space detected %s\n", e);
        }
    }
});

Button b1 = new Button(shell, SWT.PUSH);
b1.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent se) {
        System.out.printf("Button pressed %s\n", se);
    }
});

b1.addTraverseListener(new TraverseListener() {
    @Override
    public void keyTraversed(TraverseEvent te) {
        System.out.printf("Traverse detected %s\n", te);
        te.doit = true;
    }
});

If addTraverseListener()不存在,过滤后检测到您的空格按钮,因此您会看到“检测到空格...”,然后看到“按下按钮...”。现在你设置了te.doit = true,你让 SWT 进行空格键遍历(实际上什么也不做),而不是触发关键侦听器。您可以选择检查 te.detail 以仅防止助记词遍历。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SWT 全局 KeyListener 按钮焦点问题 的相关文章

随机推荐

  • 如何在表单提交后重置表单并启用提交按钮(react-formio)?

    我正在使用反应 formio包动态生成表单 我使用此链接生成了一个简单的登录表单 https codesandbox io s cra react formio iy8lz 构建后 它会创建一个 JSON 然后 我使用该 JSON 生成一个
  • sp_send_dbmail 附件编码

    我在 SQL2005 中使用 sp send dbmail 发送一封电子邮件 并将结果放在附件中 发送附件时 它是 UCS 2 编码的 我希望它是 ANSI 或 UTF 8 这是 SQL EXEC msdb dbo sp send dbma
  • LightSwitch v1 显示红色 X 并且无法加载数据

    我使用在 Visual Studio 2010 Professional 上运行的 Visual Studio LightSwitch 2011 v1 制作了一个应用程序 它是一个桌面应用程序 我使用 SQL Server 身份验证来连接到
  • 如何在文本和单选按钮之间添加空格?

    我想要文本和单选按钮之间有一个空格 为了实现这一点 我尝试了 css 类 answerBottomYesNo 通过添加 margin left 7px 由于某种原因它不起作用 下面是代码片段 div class questionRow od
  • 如何找到动态数组的大小[重复]

    这个问题在这里已经有答案了 有什么方法可以找到分配了多少字节RandomArray在这段代码中 include
  • JSoup HTTP 获取 URL 时出错。状态=405

    我想连接到https www notebooksbilliger de 但使用以下代码则不起作用 try Response response Jsoup connect url userAgent Mozilla ignoreContent
  • PHP 7.2 中未定义的函数 odbc_connect()

    我收到错误 致命错误 未捕获错误 调用未定义的函数 odbc connect Ive added the extension in php ini and phpinfo is confirming that the odbc driver
  • 取消排序:记住排列并撤消它

    假设我有一个函数 f 它接受向量 v 并返回一个新向量 其中元素以某种方式转换 它通过调用假设向量已排序的函数 g 来实现这一点 所以我希望 f 的定义如下 f v Module s r s Sort v remember the perm
  • 覆盖主页中最近添加的列表

    我想知道是否可以覆盖最近添加的列表在主页中 默认行为是任何新提交的项目都会显示在列表中 无论其发布日期如何 有没有办法覆盖它 以便仅发布最新提交的出版物 例如两年内 或有条件的出版物 if dc date issued gt 2014 显示
  • 计算 PySpark 中列的中位数

    我有一个数据框 如下所示 parsed date count 2017 12 16 2 2017 12 16 2 2017 12 17 2 2017 12 17 2 2017 12 18 1 2017 12 19 4 2017 12 19
  • 如何在 Android 中录音电话

    我需要在我的 Android 应用程序中录制电话 我尝试过使用 MediaRecorder 将 AudioSource 设置为 MIC VOICE COMMUNICATION VOICE CALL 和其他选项 但他们都没有记录通话 任何人都
  • Python - 使用正则表达式查找多个匹配项并将其打印出来[重复]

    这个问题在这里已经有答案了 我需要从 HTML 源文件中查找表单内容 我做了一些搜索并找到了很好的方法来做到这一点 但问题是它只打印第一个找到的内容 我如何循环遍历它并输出所有表单内容 而不是只是第一个 line bla bla bla
  • Firestore - 监听特定字段的变化?

    如何使用 firestore js sdk 监听特定字段的变化 在文档中 他们似乎只展示了如何监听整个文档 如果任何 SF 字段发生变化 就会触发回调 db collection cities doc SF onSnapshot funct
  • 使用反向引用和哈希时的 Ruby gsub 问题

    以下代码定义带有正则表达式 键 和替换 值 的哈希 然后它迭代哈希并相应地替换字符串 简单的字符串替换效果很好 但是当我需要在替换之前计算结果时 几年到几天的情况发生变化 它就不行了 预先定义哈希值是关键 我缺少什么 任何帮助将不胜感激 a
  • 通过 OLE 从 Ruby 或 VBS 调用时,Word Document.SaveAs 会忽略编码

    我有一个脚本 VBS 或 Ruby 可以将 Word 文档保存为 过滤后的 HTML 但编码参数被忽略 HTML 文件始终以 Windows 1252 进行编码 我在 Windows 7 SP1 上使用 Word 2007 SP3 红宝石示
  • 如何使用 jQuery 悬停、更改、切换图片

    我正在做我的项目 我正在努力做到这一点 我想让每个图像的点击都能正常工作 这样每个图像都有自己的纸张 需要它悬停 我想使用切换百叶窗效果 我读到 在这方面使用 CSS 背景是明智的 这样我可以交换图片 但我无法理解它 我已经采取了一些代码来
  • Java 8 Firebase Tasks.await()

    我在 Spring Boot 应用程序中使用 Firebase JAVA sdk 尝试验证 firebase 令牌 映射 resp new HashMap Task
  • 使用 dplyr 计算组平均值,同时排除当前观察值

    Using dplyr 最好 我试图计算每个观察值的组平均值 同时从组中排除该观察值 看来这应该可以通过组合来实现rowwise and group by 但这两个功能不能同时使用 给定这个数据框 df lt data frame grou
  • Rust 正则表达式模式 - 无法识别的转义模式

    我确实有以下字符串 lengthSeconds 2664 我想与这个正则表达式匹配 Regex new lengthSeconds d 我什至尝试过这个 Regex new r lengthSeconds d 但我得到这个 regex pa
  • SWT 全局 KeyListener 按钮焦点问题

    对于我的应用程序 我需要空格键来调用独立于焦点小部件的函数 在应用程序中的任何位置 但前提是打开相应的选项卡 我发现可以在显示中添加一个过滤器 如下所示 getShell getDisplay addFilter SWT KeyDown n