我在RCP中创建了两个不同的视图。现在我想在一个eclipse视图中完成的更改将自动反映在另一个视图中。
我对RCP插件开发完全陌生。任何人都可以帮助我使用代码来实现上述要求吗?
答案 0 :(得分:0)
我想你使用Eclipse 3平台,据我所知,有三种方法可以连接工作台部分(我的参考文献是#34; Eclipse Rich Client Platform"第二版p255):
1)要向其他部分公开结构更改,请使用Selection服务:
要注册零件更改,请使用ISelectionProvider,例如在第一个视图中:
public void createPartControl(Composite parent) {
int style = SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL;
viewer = new TableViewer(parent, style);
getSite().setSelectionProvider(viewer);
...
}
要收听更改(不要在不再需要时忘记取消注册侦听器),请使用ISelectionListener,例如在第二个视图中:
public class ChaptersView extends ViewPart {
private TableViewer viewer;
ISelectionListener listener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart part, ISelection sel) {
if (!(sel instanceof IStructuredSelection))
return;
IStructuredSelection ss = (IStructuredSelection) sel;
Object o = ss.getFirstElement();
if (o instanceof Book)
viewer.setInput(ss.size()==1 ? o : null);
}
};
public void createPartControl(Composite parent) {
getSite().getPage().addSelectionListener(listener);
}
public void dispose() {
getSite().getPage().removeSelectionListener(listener);
}
}
这些示例来自here。
2)要收听关闭,打开或隐藏等部分事件,请使用部分侦听器:
您必须在某处实现IPartListener2,然后使用活动工作台窗口的活动页面将此侦听器添加到部件侦听器:
workbenchWindow().getActivePage().addPartListener(IPartListener2);
不再需要时忘记取消注册听众:
workbenchWindow().getActivePage().removePartListener(IPartListener2);
3)您可以实现自己的通信机制,但可能会在部件之间引入过强的耦合。