【问题标题】:Eclipse J-Face Wizard: How to create next page dynamically?Eclipse J-Face 向导:如何动态创建下一页?
【发布时间】:2013-10-10 09:30:11
【问题描述】:

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

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

当我按下它的 next 按钮时,有没有办法可以从 page1 添加这个以创建?

编辑: 目前我已经在page1新建页面,然后覆盖getNextPage()如下

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

虽然我没有收到“页面未填充”消息,但当我按下下一步时,我在WizardDialog.setWizard 上被NullPointerException 击中。

【问题讨论】:

  • 当您说它不能在不知道第一页的某些值的情况下创建时,您指的是要使用的组件或填充它们的数据?你能用eclipse.org/articles/article.php?file=Article-JFaceWizards/…中的飞机和汽车的例子吗?
  • 在这种情况下不是,因为 page2 向导(我无法编辑)只能使用我需要从 page1 中选择的值来实例化。

标签: java eclipse eclipse-rcp jface wizard


【解决方案1】:

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)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,我在 page1 中创建了 page2,然后当我知道我可以创建它时,我在我的主要向导类中调用了 page2.setWizard(this)。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2013-06-05
      • 2014-04-12
      • 2011-04-25
      相关资源
      最近更新 更多