如何在 class 中传递从处理程序 class 扩展 "EditorPart" 的参数以影响 "createPartControl" UI 创建

How to pass argument in class that extends "EditorPart" from handler class to affect "createPartControl" UI creation

我有 2 个问题。

1) 命令处理程序未响应 EditorPart

2) 如何将参数传递给扩展 "EditorPart" 的 class 以影响 UI 创建的 "createPartControl" 方法。

请看下面我的代码以便更好地理解。我已经为编辑器创建了命令处理程序,但我的处理程序没有按预期响应。我想在 package explorer 中选择文件路径,并将此文件路径值传递给扩展 EditorPart 的 class,以便基于此创建 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;
}

class 扩展了 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) 方法中从处理程序 class 传递所选文件路径的值。我怎样才能做到这一点?请帮助我。

将要传递的值添加到 class 实现 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);