如何在类扩展" EditorPart"从处理程序类来影响" createPartControl"用户界面创建

时间:2018-03-24 20:32:01

标签: eclipse eclipse-plugin eclipse-rcp

我有两个问题。

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)方法中所选文件路径的值。我怎样才能做到这一点?请帮帮我。

1 个答案:

答案 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);