【问题标题】:Removing a listener from a parent method从父方法中删除监听器
【发布时间】:2015-08-14 11:42:58
【问题描述】:

我正在尝试基于 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,我不知道哪个事件类型号可以链接到我想要的 Listener。

有人可以帮帮我吗?

如何获取事件类型?

【问题讨论】:

    标签: java eclipse eclipse-plugin listener


    【解决方案1】:

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

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

    Control.getListeners 返回低级侦听器类。没有 API 可以从这个监听器映射到高级类型的监听器——所以你不能得到HelpListener

    您可以直接拨打Control.removeListener(SWT.Help, listener) 方法来删除每个低级监听器。

    【讨论】:

    • 所以你告诉我这不能做?我是否必须使用反射来摆脱 CEditor 中烦人的代码部分?
    • 您可能只需要调用低级别的removeListener 方法 - 添加到答案中。
    • 啊,是的,已经这样做了,而不是 removeHelpListener。它删除了听众,但显然我误判了我的问题仍然没有解决。我想删除该侦听器的原因是因为我想删除 CEditor 附带的上下文相关帮助。当我在某些选定文本上按 F1 时,它会将我带到帮助相关主题,而我想将 F1 挂接到帮助中的自动搜索,以供我的编辑器使用。
    猜你喜欢
    • 2017-08-17
    • 2021-06-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多