Eclipse工具插件开发之ContainerSelectionDialog资源对话框只显示当前选中项目

本文介绍了一种方法,通过修改Eclipse的源代码来实现只显示当前选中项目的功能,涉及反编译、源码修改及重置显示等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    做插件开发得时候碰到了这个需求,要求只显示工作空间中当前选中的项目,当时弄了好久没啥办法,网上搜了好久也没有想要的,怎么办了?只有自己想办法了,一开始是想办法控制给它的值,发现不行,最后只能进行反编译,然后自己改源码咯

      

private void handleBrowse(Text selectTest) {
		String project = containerText.getText().replace("/","").trim();
		ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(),
				                                                       ResourcesPlugin.getWorkspace().getRoot(), 
				                                                       false,
				                                                       "Select new file container");
		dialog.setProjectName(project);
		if (dialog.open() == ContainerSelectionDialog.OK) {
				Object[] result = dialog.getResult();
				if (result.length == 1) {
					String sour=containerText.getText();
					selectTest.setText(((Path) result[0]).toString().substring(sour.length()+1).replace("/", "."));
				}
			}
	}
这是对它基础调用,ContainerSelectionDialog对它翻译之后会在类开头看到一个ContainerSelectionGroup类的声明,这个类里面才是封装ContainerSelectionDialog里面的树状菜单,然后继续反编译,ContainerSelectionGroup类反编译之后找到createTreeViewer方法,在这个方法最后一行有一个this.treeViewer.setInput(
ResourcesPlugin.getWorkspace()<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">);代码,这就是传值到树状菜单了,然后把这个改掉,我改成的是IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
hide(root); this.treeViewer.setInput(root); 先获取项目空间所有项目,然后把当前选中得项目名传过来遍历对比,不是当前项目就全部隐藏掉</span><pre name="code" class="java">private void hide(IWorkspaceRoot root){
		try {
			iproject =root.getProjects();
			if(iproject==null || iproject.length==0){
			      return;
			}
			for (int i = 0; i < iproject.length; i++) {
				   if(!projectName.equals(iproject[i].getName())){
					   iproject[i].setHidden(true);
		           }
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
最后在设值,显示出来之后再把值还原回去,需要在ContainerSelectionDialog类里面createDialogArea方法中设置<pre name="code" class="java">public void show(){
		try {
			if(iproject==null || iproject.length==0){
			      return;
			}
			for (int i = 0; i < iproject.length; i++) {
			     iproject[i].setHidden(false);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}  
<span style="white-space:pre">	</span>然后就搞定了




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值