Java 从父方法中删除侦听器
我正在尝试基于CEditor编写一个编辑器,但不希望它继承的方法中有一个侦听器,这与我的一个特性相冲突 因此,我希望继承该方法,但从中删除侦听器及其实现 代码如下所示: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 =
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链接到我的编辑器的“帮助”中的自动搜索。