【问题标题】:How to call a custom listener upon ESC key instead of default shell listener?如何在 ESC 键上调用自定义侦听器而不是默认的 shell 侦听器?
【发布时间】:2023-04-10 14:20:01
【问题描述】:

我有一个扩展 ColumnViewerToolTipSupport 的类。此类覆盖createViewerToolTipContentArea() 并为工具提示提供自定义内容。

当工具提示打开时按下 ESC 键时,将调用 shell.close() 方法。即使我在工具提示 shell 中添加了一个关键侦听器,也会调用 shell.close() 本身。

下面的监听代码:

   @Override
    protected Composite createViewerToolTipContentArea(Event event, ViewerCell cell, final Composite shell) {

        Display.getDefault().getActiveShell().addListener(SWT.KeyDown, new Listener() {
            @Override
            public void handleEvent(final Event event) {
                if (event.type == SWT.KeyDown) {
                    System.out.println("key pressed ..........close shell");
                }
            }
        });
}

这里有什么错误吗??

【问题讨论】:

  • 只听一个事件不会改变其他听者的行为。
  • 我可以在这里做什么来调用我的监听器而不是 shell 监听器??
  • 您可以尝试调用getListeners(SWT.KeyDown),然后删除监听器。

标签: java eclipse swt listener rcp


【解决方案1】:

如果您检查 ToolTip 类(它是 ColumnViewerToolTipSupport 的基类),您会发现没有选项可以更改事件处理。它使用一个私有监听器实现来监听 keydown(甚至不仅是 ESC)和其他事件。

他们提供的唯一 API 是 afterHideToolTip(Event event),您可以在其中检查事件的 ESC 键。但是你只能做额外的事情。没有 beforeHideToolTip 可以决定你喜欢用 tooltip 事件做什么。

对于您为什么添加侦听器没有帮助的问题:它们只是被添加了。其他监听器也被执行。

【讨论】:

    【解决方案2】:

    你可以试试这个:

    event.doit = false;
    

    这应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-09
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多