Java 从父方法中删除侦听器

Java 从父方法中删除侦听器,java,eclipse,eclipse-plugin,listener,Java,Eclipse,Eclipse Plugin,Listener,我正在尝试基于CEditor编写一个编辑器,但不希望它继承的方法中有一个侦听器,这与我的一个特性相冲突 因此,我希望继承该方法,但从中删除侦听器及其实现 代码如下所示: class CEditor{ @Override public void createPartControl(Composite parent) { super.createPartControl(parent); final IWorkbenchHelpSystem helpSystem =

我正在尝试基于CEditor编写一个编辑器,但不希望它继承的方法中有一个侦听器,这与我的一个特性相冲突

因此,我希望继承该方法,但从中删除侦听器及其实现

代码如下所示:

class CEditor{
@Override
public void createPartControl(Composite parent) {
        super.createPartControl(parent);

        final IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
        parent.addHelpListener(new HelpListener() {
            public void helpRequested(HelpEvent e) {
                IContextProvider provider = (IContextProvider) CEditor.this.getAdapter(IContextProvider.class);
                if (provider != null) {
                    IContext context = provider.getContext(CEditor.this);
                    if (context != null) {
                        helpSystem.displayHelp(context);
                        return;
                    }
                }
                helpSystem.displayHelp(ICHelpContextIds.CEDITOR_VIEW);
            }});
        ...
}}

class MyEditor{
@Override
public void createPartControl(Composite parent) {
            super.createPartControl(parent);
            Listener[] listeners = parent.getListeners(<<eventType>>);
            for (Listener listener : listeners)
                parent.removeHelpListener((HelpListener) listener);}
类编辑器{ @凌驾 公共void createPartControl(复合父级){ super.createPartControl(父级); 最终IWorkbenchHelpSystem helpSystem=PlatformUI.getWorkbench().getHelpSystem(); parent.addHelpListener(新的HelpListener(){ 请求的公共无效帮助(帮助事件e){ IContextProvider=(IContextProvider)CEditor.this.getAdapter(IContextProvider.class); if(提供程序!=null){ IContext context=provider.getContext(CEditor.this); if(上下文!=null){ helpSystem.displayHelp(上下文); 返回; } } 显示帮助(ICHelpContextIds.CEDITOR\u视图); }}); ... }} 类编辑{ @凌驾 公共void createPartControl(复合父级){ super.createPartControl(父级); Listener[]listeners=parent.getListeners(); for(侦听器:侦听器) parent.removeHelpListener((HelpListener)listener);} 但是它不起作用,getListener(int eventType)方法要求一个eventType,我不知道哪个事件类型号可以链接到我想要的侦听器

有人能帮我吗


如何获取事件类型?

SWT有两种类型的侦听器。低级侦听器具有“事件类型”代码,高级侦听器具有“类型化侦听器”

添加高级
HelpListener
时,将创建一个具有事件代码
SWT.Help的低级侦听器,并将其添加到侦听器列表中

Control.getListeners
返回低级侦听器类。没有API可从该侦听器映射到高级类型的侦听器-因此无法获取
帮助侦听器


您可能只需调用
控件。RemovelListener(SWT.Help,listener)

方法来删除每个低级侦听器。

那么你是说这无法完成?我是否必须使用反射来从CEditor中删除恼人的代码部分?你可能只需调用低级
removeListener
方法-添加到应答中。啊,是的,已经这样做了,而不是removeHelpListener。它会删除列表ener但显然我误判了我的问题仍然没有解决。我想删除该侦听器的原因是因为我想删除CEditor附带的上下文相关帮助。当我在某些选定文本上按F1键时,它会将我带到与帮助相关的主题,而我想将F1链接到我的编辑器的“帮助”中的自动搜索。