我有两个问题。
1)命令处理程序没有响应EditorPart
2)如何将参数传递给扩展的类" EditorPart"影响" createPartControl"用于创建UI的方法。
请在我的代码中查看以下内容以便更好地理解。我为Editor创建了命令处理程序,但我的处理程序没有按预期响应。我希望在包资源管理器中包含所选文件路径,并将此文件路径值传递给扩展EditorPart的类,以便根据此选定文件创建UI。
Handler.java
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
// get the page
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
// get the selection
ISelection selection = HandlerUtil.getCurrentSelection(event);
IStructuredSelection sel = (IStructuredSelection) selection;
Object selObj = sel.getFirstElement();
if (selObj instanceof IResource) {
resource = (IResource) selObj;
project = resource.getProject();
location = project.getLocation();
}else {
IAdaptable adaptable = (IAdaptable)selObj;
Object adapter = adaptable.getAdapter(IResource.class);
resource = (IResource) adapter;
project = resource.getProject();
location = project.getLocation();
}
TaskEditorInput input = new TaskEditorInput();
try {
page.openEditor(input, "launcher.ChartEditor");
} catch (PartInitException e) {
e.printStackTrace();
}
return null;
}
扩展EditorPart的类
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
setSite(site);
setInput(input);
setPartName("ChartEditor");
}
public void createPartControl(Composite _parent) {
}
public void createChart(String filePath) {
dataset = chart1.createDataset(filePath);
try {
chart = chart1.createChart(dataset);
frame = new ChartComposite(parent, SWT.NONE, chart, true);
frame.pack();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我想从处理程序类传递此createChart(String filePath)方法中所选文件路径的值。我怎样才能做到这一点?请帮帮我。
答案 0 :(得分:0)
将要传递的值添加到实现IEditorInput
(在您的情况下为TaskEditorInput
)的类中。编辑器输入被赋予编辑器init
方法,因此您可以在那里获取值:
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
if (input instanceof TaskEditorInout) {
TaskEditorInput taskInput = (TaskEditorInput)input;
// TODO save value for createPartControl
}
setSite(site);
setInput(input);
setPartName("ChartEditor");
}
要确保获得与选择相对应的资源,您需要使用平台适配器管理器。在现代版本的Eclipse上,您可以使用
IStructuredSelection sel = HandlerUtil.getCurrentStructuredSelection(event);
IResource resource = Adapters.adapt(sel.getFirstElement(), IResource.class);