2015-07-01 25 views
1

當按下F1時,TrayDialog的默認行爲是通過調用openTray()打開幫助托盤(如果尚未打開)。我不希望這種行爲(但我確實想使用ElementTreeSelectionDialog,它擴展了TrayDialog),我不知道如何禁用它。如何永久禁用SWT TrayDialog中的托盤?

我試圖添加我自己的偵聽器事件篩選器SWT.KeyDown並在我的handleEvent()中設置event.type = SWT.NONE沒有成功(我自己的事件處理程序工作,但托盤已打開)。

我也試圖重寫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。

+0

什麼堆棧跟蹤你得到的,當你覆蓋'openTray'的NPE? –

+0

@ greg-449添加了堆棧跟蹤。 – leonbloy

回答

1

嗯,我找到了一種方法。我不知道這是否是推薦/清潔/安全的方式,但在情況下,它可以幫助別人,這個工作對我來說:

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