如何通过JFace Eclipse Wizard页面执行自定义导航?

时间:2017-12-19 09:50:38

标签: java eclipse iterator jface wizard

我有六页的Eclipse JFace向导。在第一个,我有检查按钮来选择要显示的页面 - 如果你全部检查,你将通过整个向导,但你也可以只选择特定页面,然后只显示那些页面。

到目前为止,我使用了迭代器和表示每个页面的枚举对象。我在getNextPage函数中调用了迭代器的下一个对象,并在if..else的情况下以正确的顺序返回某些页面。问题是,getNextPage不仅在按下下一步按钮时调用,而且在调用pageComplete事件等时调用,因此迭代器在我想要时不会更新其光标,并且最终快点这是我的假设的片段:

else if(page == FirstPage )
{
    // iterator contains SelectedAction - enum objects representing pages
    this.pageIterator = page.getWizardPagesList().iterator();

    if(pageIterator.hasNext())
    {
        return selectedActionToPage(pageIterator.next());
    }
}
else
{
    if(pageIterator.hasNext())
    {
        SelectedAction action = pageIterator.next();
        if(!pageIterator.hasNext())
        {
         // we check if current page was last one
            setFinished(true);
            setLastPage(selectedActionToPage(action));
        }
        // selectedActionToPage converts enum object to WizardPage class
        return selectedActionToPage(action);
    }
    else if((pageIterator != null) && !pageIterator.hasNext())
    {
        return page;
    }
}
return page;

特别是,我想知道的事情是:

首先,有没有其他方法可以捕获下一步按钮?我知道 WizardDialog 类中有NextPressed方法,但我不知道如何从Wizard类或WizardPage调用它的实例。 第二,还有其他方法可以自定义导航页面,转到指定的页面吗?

1 个答案:

答案 0 :(得分:0)

不,您不应该尝试拦截下一个按钮,单击该逻辑对于向导对话框是私有的,您不应该试图干扰它,

您可以覆盖WizardPage

public IWizardPage getNextPage()

方法或您可以覆盖Wizard

public IWizardPage getNextPage(IWizardPage page)

您可能还需要覆盖匹配的getPreviousPage方法。无论何时调用该方法,您都必须使代码工作。您将获得有关当前页面的信息,您的代码应使用该信息来确定下一页。