【发布时间】:2015-05-07 15:29:46
【问题描述】:
我有一个具有不同视图的 RCP 应用程序。视图应该通过 Eclipse SelectionService 相互交互。 在视图 1 中,我添加了一个 SelectionListener 与
getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this.listener);
在视图 2 中,我添加了一个带有
的 SelectionProvidergetSite().setSelectionProvider(this);
为了让它工作,我在视图 2 中实现了来自 IInputSelectionProvider 的方法。当我运行我的程序时,视图 1 的选择侦听器没有被调用。调试后, 我发现视图 1 没有添加到视图 2 的侦听器列表中。在视图 2 中我有一个方法
private ListenerList listenersList = new ListenerList();
@Override
public void addSelectionChangedListener(ISelectionChangedListener iselectionchangedlistener) {
// TODO Auto-generated method stub
listenersList.add(iselectionchangedlistener);
}
将侦听器添加到 IInputSelectionProvider。我的问题是:谁应该调用这个方法。我的理解是 Eclipse SelectionService 应该使用
getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this.listener);
但它不起作用。我必须自己填写listenerList吗?如果是,为什么我必须使用 SelectionService? 或者我是否必须通过调用任何其他方法而不使用列表来遍历侦听器列表?因为如果我检查 ISelectionService 对象
ISelectionService service = getSite().getWorkbenchWindow().getSelectionService();
我看到所有的听众。 但它们不是上面 listenerList 的一部分。
【问题讨论】:
-
你在打电话给
ISelectionProvider.setSelection吗? -
是的,我愿意。我使用这个实现:@Override public void setSelection(final ISelection iselection) { Object listeners[] = listenersList.getListeners(); for (int i = 0; i
标签: eclipse-rcp