Eclipse J-Face向导:如何动态创建下一页?

时间:2013-10-03 15:38:09

标签: java eclipse eclipse-rcp jface wizard

我有一个带有单页的eclipse JFace向导(让我们称之为page1),使用mainWizard将其添加到addPage(page1)

我希望有第二页(page2),但这只能根据page1确定的值创建(因此无法添加到mainWizard

当我按下下一个按钮时,我可以通过page1添加此功能吗?

编辑: 目前,我已在page1中创建新页面,然后按以下方式覆盖getNextPage()

@Override
public IWizardPage getNextPage() {
 if (page2 != null) {
  return page2;
 }
 System.err.println("page not populated");
 return null;
}

虽然我没有收到“未填充页面”的消息,但当我按下“NullPointerException WizardDialog.setWizard时,我会点击{{1}}。

3 个答案:

答案 0 :(得分:5)

org.eclipse.jface.wizard.Wizard具有在现有步骤的末尾动态添加页面所需的全部内容。如果符合条件,您可以通过覆盖getNextPage来返回新页面来执行此操作:

@Override
public IWizardPage getNextPage() {
   IWizardPage nextPage = super.getNextPage(page);
   if (nextPage == null) {
      if (userInputRequiresMorePage){
         // The user input is such that we need an additional page to append to the wizard.
         IWizardPage nextPage = new MyAdditionalPage();
      }
   }
   return nextPage;
}

如果您的向导仅以一页开头,则默认情况下不会显示“后退”和“下一步”按钮。由于您可能需要更多步骤,因此您需要显示它们。您可以通过使用API​​

设置正确的标志来实现
public void org.eclipse.jface.wizard.Wizard.setForcePreviousAndNextButtons(boolean b)

答案 1 :(得分:3)

编写JFace向导时的典型方法是扩展Wizard类并在addPages()方法中添加页面。虽然这对许多情况来说都很方便,但您可以选择直接实现IWizard界面,并在页面的创建和排序方面拥有所需的所有控制权。

答案 2 :(得分:1)

您可以创建第二个页面,其中只有一个复合词,并在向导addPage中为其调用addPages

在第二页中覆盖setVisible(boolean)方法,并在页面可见时创建所需的控件。