按下F1时,TrayDialog的默认行为是通过调用openTray()打开帮助托盘(如果尚未打开)。我不想这种行为(但我确实想使用扩展了ElementTreeSelectionDialogTrayDialog),而且我不知道如何禁用它。

我尝试为SWT.KeyDown添加我自己的侦听器事件过滤器,并在我的event.type = SWT.NONE中设置handleEvent()失败(我自己的事件处理程序正常工作,但托盘也已打开)。

我还尝试覆盖openTray()不执行任何操作,但是随后引发了NPE:

java.lang.NullPointerException
    at org.eclipse.help.ui.internal.DefaultHelpUI.displayContextAsHelpTray(DefaultHelpUI.java:426)
    at org.eclipse.help.ui.internal.DefaultHelpUI.displayContext(DefaultHelpUI.java:348)
    at org.eclipse.help.ui.internal.DefaultHelpUI.displayContext(DefaultHelpUI.java:288)
    at org.eclipse.ui.internal.help.WorkbenchHelpSystem.displayContext(WorkbenchHelpSystem.java:905)
    at org.eclipse.ui.internal.help.WorkbenchHelpSystem$WorkbenchHelpListener.helpRequested(WorkbenchHelpSystem.java:142)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:153)
    ...


有任何想法吗?我正在使用Eclipse Kepler。

最佳答案

好吧,我找到了办法。我不确定这是否是推荐的/干净的/安全的方法,但是如果它对某人有所帮助,那么这对我有用:

@Override
protected void configureShell(Shell shell) {
    super.configureShell(shell);
    shell.addHelpListener(new HelpListener() {
        @Override
        public void helpRequested(HelpEvent e) {
            // nothing to do
        }
    });
}

10-05 21:42