我有一个扩展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");
}
}
});
}
这里有什么错吗?
答案 0 :(得分:0)
你可以试试这个:
event.doit = false;
应该这样做。
答案 1 :(得分:0)
如果检查 ToolTip 类(它是ColumnViewerToolTipSupport的基类),您会发现没有更改事件处理的选项。它使用一个私有的Listener实现,它监听keydown(甚至不仅仅是ESC)和其他事件。
他们提供的唯一API是 afterHideToolTip(事件事件),您可以在其中检查事件的ESC键。但你只能添加其他东西。没有beforeHideToolTip可以决定你对工具提示事件做什么。
您的问题为什么添加一个监听器没有帮助:它们只是添加了。其他听众也被执行。