Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现iSelectListener以监视project explorer中的选定项目_Java_Eclipse_Eclipse Plugin_Eclipse Rcp_Eclipse Cdt - Fatal编程技术网

Java 实现iSelectListener以监视project explorer中的选定项目

Java 实现iSelectListener以监视project explorer中的选定项目,java,eclipse,eclipse-plugin,eclipse-rcp,eclipse-cdt,Java,Eclipse,Eclipse Plugin,Eclipse Rcp,Eclipse Cdt,我试图在我的eclipse插件中实现一个iSelectListener,它将跟踪我的项目浏览器中的选择,并告诉我选择了哪些项目。因此,它与build工具栏按钮查找每次选择要构建的项目的方式相同。我实现了该侦听器,但只有当用户单击实际项目,而不是项目下的任何其他项目(如源代码、文件夹、包…)时,我才能选择项目。我的代码是: @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) {

我试图在我的eclipse插件中实现一个iSelectListener,它将跟踪我的项目浏览器中的选择,并告诉我选择了哪些项目。因此,它与build工具栏按钮查找每次选择要构建的项目的方式相同。我实现了该侦听器,但只有当用户单击实际项目,而不是项目下的任何其他项目(如源代码、文件夹、包…)时,我才能选择项目。我的代码是:

    @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的实例,并且是CModelManager、CDT中的cSource/cxxSource……以及任何其他可以成为项目一部分的元素,那么是否有一种通用方法来获取它所属的项目

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

如果您希望根据从project explorer中选择的元素控制某些操作,我们可以通过service registry注册选择后的更改

//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!!
   }
  }

 }

}