`
圣诞王子
  • 浏览: 82960 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

RCP之Wizard开发-- 如何更新next和finish按钮

 
阅读更多

在开发RCP项目的时候,如何控制Wizard中的next和finish按钮呢?

 

一般我们的wizardpage页面都是继承了WizardPage,查看API里面有两个方法可以控制,一个是 void setPageComplete(boolean) ,一个是boolean canFlipToNextPage()

 

setPageComplete(boolean) 是控制当前页面的finish按钮是否可用,我们可以设置setPageComplete(false) 让按钮不可用;

 

canFlipToNextPage 用于控制next按钮是否可用,一般来说都是重新该方法,里面的逻辑判断来控制next是否可用;

 

当然,在开发的过程我也遇到,我已经重写了canFlipToNextPage方法了,但是不起效果,而且是等到第二遍的时候才开始更新按钮的状态,不知道为什么。后来看它的源代码,发现一个方法getContainer().updateButtons();,该方法是更新容器里面的按钮状态的,结果发现OK,可以立即更新按钮状态了

 

最后遇到了一个最棘手的问题,最后一页的finish按钮不能使用了,我设置的setPageComplete(true)。按道理来说,Wizard向导的最后一页的finish按钮就应该会显示,但是结果令人费解。后来看了他的源代码,发现 最后一页的finish按钮是通过canFinish()来控制的(canFinish()是父类Wizard中的方法),而canFinish的写法如下:

 

/*
 * (non-Javadoc) Method declared on IWizard.
 */
public boolean canFinish() {
    // Default implementation is to check if all pages are complete.
    for (int i = 0; i < pages.size(); i++) {
        if (!((IWizardPage) pages.get(i)).isPageComplete()) {
	     return false;
	}
    }
    return true;
}

 发现,只有当Wizard向导中之前所有的页面的isPageComplete都为true的时候,最有一页的finish才可以显示,于是解决方案就出来:

我在最有一页的方法里面,把之前的WizardPage 中setPageComplete(true)不久OK 了么,

 

//确保前两个页面的pageComplete是正确的
for(int i = 0;i<getWizard().getPageCount();i++){
	IWizardPage[] pages = getWizard().getPages();
	((WizardPage)pages[i]).setPageComplete(true);
}
	  		
getContainer().updateButtons();//立即更改按钮情况

 到此两个疑问就解决了......

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics