使用命令向FormEditor添加并显示新的FormPage

时间:2011-06-22 22:29:47

标签: eclipse-plugin eclipse-rcp

我有一个使用Eclipse 3.6的Eclipse RCP独立应用程序。

我为FormEditor实现了FormEditor和FormPage(Formagedditor)。在第一个FormPage上是一个Button,它有一个Command来计算一些数据,并应该打开第二个带有结果的FormPage。

计算结果,第二个FormPage显示结果并正确添加到FormEditor。

我的问题是FormEditor中只显示一个新选项卡。我希望立即显示第二个FormPage。相反,您必须单击选项卡才能看到第二页。

以下是Handler的代码,它将FormPage添加到编辑器中。

IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage page = window.getActivePage();

for(IEditorReference reference : page.getEditorReferences()){
  if(reference .getId().equals("my.project.MyFormEditor")){
    EditorPart part = (EditorPart) reference.getEditor(true);
    MyFormEditor editor = (MyFormEditor)part;
    editor.addResultPage();
  }
}

这很好用,但我现在需要将ResultPage带到Foreground。所以我试着用:

调用ResultPage的setFocus()方法
IFormPage resultPage = editor.findPage("my.project.ResultPage");
resultPage.setFocus();

并夸大了ResultPage的setFocus()方法,如下所示:

public void setFocus(){
 this.getPartControl().setFocus();
}

但是当Method setFocus尝试获取PartControl时,会导致NullPointer Exeption。似乎在那个时间点没有加载ResultPage 所以我尝试通过asyncExec调用setFocus()方法,如下所示:

Display.getDefault().asyncExec(new Runnable() {
 public void run() {
 //...call the setFocus() Method ....
 }
}

但是这会导致相同的NullpointerException。通过向Runnable添加等待,它会导致IllegalMonitorState异常。

所以我尝试了几种方法并在互联网上搜索解决方案但却找不到解决方案。所以我希望也许你可以帮助我。

是否有一种干净的方式将特定的FormPage带到前台?调用setFocus()方法错了吗?它应该像toForeground()吗?或者FormEditor / FormPage UI元素是否可以实现这一点?

最好的问候

的Matthias

1 个答案:

答案 0 :(得分:1)

尝试使用您的EditorPart ((CTabFolder) getContainer()).setSelection(2);