如何在 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);
我有 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);