如何在ESC键而不是默认shell侦听器上调用自定义侦听器?

时间:2017-12-19 12:16:27

标签: java eclipse swt listener rcp

我有一个扩展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");
                }
            }
        });
}

这里有什么错吗?

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

event.doit = false;

应该这样做。

答案 1 :(得分:0)

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

他们提供的唯一API是 afterHideToolTip(事件事件),您可以在其中检查事件的ESC键。但你只能添加其他东西。没有beforeHideToolTip可以决定你对工具提示事件做什么。

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