从父方法中删除侦听器
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)
删除每个低级别侦听器的方法。
我正在尝试做一个基于 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)
删除每个低级别侦听器的方法。