Performance Eclipse插件开发——PopupMenuCreation
我正在开发一个使用eclipse插件开发的向导 要求: 我必须创建一个上下文菜单,当用户右键单击java项目中的源文件夹时,该菜单需要立即填充。一旦用户执行了第一步,我的处理程序就需要在向导中获取选定的src文件夹。我的向导包含一个treeviewer,我需要在其中打包所选的src文件夹 我的分析是: 我有一个获取所选包的处理程序类 SampleHandler.javaPerformance Eclipse插件开发——PopupMenuCreation,performance,plugins,eclipse-plugin,eclipse-rcp,m2eclipse,Performance,Plugins,Eclipse Plugin,Eclipse Rcp,M2eclipse,我正在开发一个使用eclipse插件开发的向导 要求: 我必须创建一个上下文菜单,当用户右键单击java项目中的源文件夹时,该菜单需要立即填充。一旦用户执行了第一步,我的处理程序就需要在向导中获取选定的src文件夹。我的向导包含一个treeviewer,我需要在其中打包所选的src文件夹 我的分析是: 我有一个获取所选包的处理程序类 SampleHandler.java public Object execute(ExecutionEvent事件)抛出ExecutionException{ sh
public Object execute(ExecutionEvent事件)抛出ExecutionException{
shell=HandlerUtil.getActiveShell(事件);
//初始化工作台窗口对象
IWorkbenchWindow=(IWorkbenchWindow)HandlerUtil.getActiveWorkbenchWindow(事件);
ISelection sel=HandlerUtil.getActiveMenuSelection(事件);
最终IStructuredSelection=(IStructuredSelection)sel;
Object firstElement=selection.getFirstElement();
if(IPackageFragment的第一个元素实例){
//获取所选片段
IPackageFragment packageFragment=(IPackageFragment)firstElement;
modelPackage=packageFragment.getElementName();
布尔值a=!ProjectResourceHelper.isEntityBasePackage(modelPackage);
如果(a==true){
MessageDialog.openInformation(shell,“警告”,“请从实体基础包中单击”);
Shell Shell=HandlerUtil.getActiveShell(事件);
绿色向导=新建绿色向导();
WizardDialog=新建WizardDialog(part.getSite().getShell(),向导);
dialog.create();
dialog.open();
返回null;
}
试试{
run(true,true,new-irunablewithprogress(){
@凌驾
public void run(IProgressMonitor监视器)抛出InvocationTargetException、InterruptedException{
monitor.beginTask(“正在生成层代码…”,1);
//调用generate layers方法
监测工作(1);
//操作完成后完成。
monitor.done();
}
});
}
捕获(调用targetException ite){
MessageDialog.openError(shell,“绿地代码生成异常”,ite.getMessage());
}
捕获(中断异常ie){
MessageDialog.openError(shell,“绿地代码生成异常”,即getMessage());
}
}
我有在这个方法中调用的主向导类
GreenWizard=newgreenwizard();
作为回报,我的主向导将调用我的向导页面,在该页面中,我需要在用户右键单击时执行选择
我的魔法课
public GenerateGreenfieldLayer(IWorkbench工作台,
IStructuredSelection(选择){
超级(“绿地”);
setImageDescriptor(资源管理器
.getImageDescriptor(“\\icons\\greenfield new wiz.png”);
setTitle(“绿地生成层”);
setDescription(“选择特定类别以生成图层”);
}
/**
*创建向导的内容。
*
*@param父级
*/
@凌驾
公共void createControl(复合父级){
复合容器=新复合(父级,SWT.NULL);
setControl(集装箱);
setLayout(新的GridLayout(2,false));
最终CheckboxTreeViewer treeViewer=新CheckboxTreeViewer(容器,
边界);
tree=treeViewer.getTree();
setToolTiptText(“选择包”);
GridData gd_树=新的GridData(SWT.FILL,SWT.FILL,true,true,1,1);
gd_tree.widthHint=280;
gd_tree.heightHint=140;
setLayoutData(gd_树);
setContentProvider(新的GreenfieldTreeContentProvider());
setLabelProvider(新WorkbenchLabelProvider());
addSelectionChangedListener(新的ISelectionChangedListener(){
公共作废selectionChanged(SelectionChangedEvent事件){
}
});
}
任何人都可以指导我如何从object方法中获取选择,并在我的向导页面中作为treeviewer初始输入传递
请纠正我,如果我错过了任何步骤,因为我是非常新的这一点
提前感谢您应该将代码分为以下几部分和数据流:
- 处理程序:获取所选内容并创建向导和向导对话框(就像您已经做的那样)
- Handler->Wizard:使用向导的构造函数或自定义的
方法(从处理程序调用)从处理程序设置所选对象(或任何要作为初始数据传递的对象)init(foo)
- 向导->向导页面:创建向导时,实例化向导页面并将所选内容传递给向导页面。(如果您需要一个更复杂的模型,它在向导和它的页面之间共享,就可以考虑创建一个实例化一个简单的值保持类作为向导模型;即,一个带有数据和GETS/SETTER的简单java类。如果您将其传递给每个页面的构造函数,那么该对象可以在页面上共享)
- 向导页面:为向导页面创建UI,让用户修改模型
- WizardPage->Wizard:如果不通过值持有者类使用共享向导模型,请使用
方法让向导从页面访问用户的输入getXxx()
- 向导:实现
在向导结束时使用向导。performFinish()
执行工作,而不是在处理程序中调用getContainer().run()
窗口。run()