Performance Eclipse插件开发——PopupMenuCreation

Performance 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

我正在开发一个使用eclipse插件开发的向导

要求:

我必须创建一个上下文菜单,当用户右键单击java项目中的源文件夹时,该菜单需要立即填充。一旦用户执行了第一步,我的处理程序就需要在向导中获取选定的src文件夹。我的向导包含一个treeviewer,我需要在其中打包所选的src文件夹

我的分析是:

我有一个获取所选包的处理程序类

SampleHandler.java

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()

谢谢你的回复Stefan,你能给我举个例子说明一下吗?这样我就可以实施并了解它的工作原理