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

问题描述 投票:0回答:2

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

这里有什么错吗?

java eclipse swt listener rcp
2个回答
0
投票

你可以试试这个:

event.doit = false;

这应该够了吧。


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.