从父方法中删除侦听器

Removing a listener from a parent method

我正在尝试做一个基于 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);}

但它不起作用,getListener(int eventType) 方法需要一个 eventType,我不知道哪个事件类型编号可以链接到我想要的监听器。

有人能帮帮我吗?

如何获取事件类型?

SWT 有两种类型的侦听器。具有 'event type' 代码的低级别侦听器和更高级别的侦听器 'typed listener'.

当您添加高级别 HelpListener 时,将创建事件代码为 SWT.Help 的低级别侦听器并将其添加到侦听器列表中。

Control.getListeners returns 低级监听器 class。没有 API 可以从这个 Listener 映射到高级类型化的 listener - 所以你不能得到 HelpListener

你可以直接调用 Control.removeListener(SWT.Help, listener) 删除每个低级别侦听器的方法。