例如我们要想在自己开发的插件里面获取到选中的这个项目,应该怎么办呢?
1、要实现ISelectionListener接口
2、我们要在自己的插件初始化的时候加上这句话。
// 一定要添加这句话,select监听才会起效果
getSite().getPage().addSelectionListener("org.eclipse.ui.navigator.ProjectExplorer", this);
3、因为实现了ISelectionListener接口,需要重写selectionChanged方法,在这个里面当项目选择有变化的时候,我们就能通过ISelection获取到选择的项目。
例子:我这边自己的插件是一个ViewPat
public abstract class TestView extends ViewPart implements ISelectionListener {
public IProject curPro = null;
public ISelection curSelection;
protected String chip = null;
protected HashMap<String, Object> projectMap;
@Override
public void createPartControl(Composite parent) {
// 一定要添加这句话,select监听才会起效果
getSite().getPage().addSelectionListener("org.eclipse.ui.navigator.ProjectExplorer", this);
}
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (selection == null) {
return;
}
if (selection instanceof TreeSelection) {
TreeSelection treeSel = (TreeSelection) selection;
Object obj = treeSel.getFirstElement();
if (obj == null) {
setProject(null);
return;
}
if (obj instanceof Project) {
setProject((Project) obj);
curSelection = selection;
} else {
if (obj instanceof ICElement) {
String proName = ((ICElement) obj).getCProject().getElementName();
// System.out.println(proName);
setProject(ResourcesPlugin.getWorkspace().getRoot().getProject(proName));
}else {
setProject(null);
}
}
}
}
}
如何让代码控制让Package Explore视图选中我需要它选中的项目呢?
1、先获取到ProjectExplorer的视图。
IViewPart viewPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.findView("org.eclipse.ui.navigator.ProjectExplorer");
2、构造一个selection通过projectExplorer的视图给他set进去。例如tve.curSelection这个参数就是上面监听方法是,每次点击之后我保存下来的selection。
viewPart.getSite().getSelectionProvider().setSelection(tve.curSelection);