【问题标题】:Implementing an ISelectionListener to monitor selected projects in project explorer实施 ISelectionListener 以在项目资源管理器中监视选定的项目
【发布时间】:2012-09-06 19:11:12
【问题描述】:

我正在尝试在我的 Eclipse 插件中实现 ISelectionListener,它将跟踪我的项目资源管理器中的选择并告诉我选择了哪些项目。所以它与构建工具栏按钮查找每次选择要构建的项目的方式相同。我实现了那个监听器,但只有当用户点击实际项目而不是项目下的任何其他项目(如源代码、文件夹、包......)时,我才能选择项目我的代码是:

    @Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
    Object[] allselections= null;
    selectedProjects.clear();
    // TODO Auto-generated method stub

    if(selection instanceof IStructuredSelection) {
        //Object element = ((IStructuredSelection)selection).getFirstElement();
        allselections = ((IStructuredSelection)selection).toArray();
        for(Object element: allselections){

            if (element instanceof IResource) {
                selectedProjects.add(((IResource)element).getProject());

        }
    }
};

当元素不是 IResource 的 instanceof 并且是 CModelManager、来自 CDT 的 cSource/cxxSource ......以及可以成为项目一部分的任何其他内容时,是否有通用方法来获取它所属的项目?

对于 IResourceChangeListener,您可以使用 IResourceDeltaVisitor,然后您可以使用以下方法将所有内容作为 IResource 实例获取:在 visit(IResourceDelta delta) 函数中使用 IResource resource = delta.getResource()。 ISelectionListener 有类似的东西吗?

【问题讨论】:

    标签: java eclipse eclipse-plugin eclipse-rcp eclipse-cdt


    【解决方案1】:
    【解决方案2】:

    http://exploreeclipse.blogspot.com/2015/05/listening-to-project-explorer-changes.html

    如果您想根据从项目浏览器中选择元素来控制某些操作,我们可以通过服务注册表注册一个帖子选择更改。

    //Register listener
    ISelectionService ss = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
    
    ProjectExplorerSelectionListener selectionListener = new ProjectExplorerSelectionListener();
    ss.addPostSelectionListener(IPageLayout.ID_PROJECT_EXPLORER, selectionListener);
    
    
    
    //Listener
    import org.eclipse.core.resources.IProject;
    import org.eclipse.core.resources.IResource;
    import org.eclipse.core.runtime.IAdaptable;
    import org.eclipse.jface.viewers.ISelection;
    import org.eclipse.jface.viewers.IStructuredSelection;
    import org.eclipse.ui.ISelectionListener;
    import org.eclipse.ui.IWorkbenchPart;
    
    class ProjectExplorerSelectionListener implements ISelectionListener
    {
     public void selectionChanged(IWorkbenchPart part, ISelection newSelection)
     {
      if (newSelection instanceof IStructuredSelection)
      {
       Object element = ((IStructuredSelection) newSelection).getFirstElement();
       if (element instanceof IAdaptable)
       {
        IResource resource = (IResource) ((IAdaptable) element).getAdapter(IResource.class);
        final IProject project = resource.getProject();
    
        //do your action here!!
       }
      }
    
     }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-29
      • 2010-10-14
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2010-11-26
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多