不过还有另外一个问题没有解决,就是如果我现在一个Wizard中有a,b两个WizardPage,目前我停留在b WizardPage中,我现在点击back回到a WizardPage中,然后对内容做了修改,此次我希望再回到b WizardPage的时候,里面的内容也同时跟着发生改变,但是仅仅是复写Wizard的createPageControls()方法是无法实现,我们通过查看源代码,发现在org.eclipse.jface.wizard.WizardDialog.updateForPage(IWizardPage page)中:
java 代码
- private void updateForPage(IWizardPage page) {
- // ensure this page belongs to the current wizard
- if (wizard != page.getWizard()) {
- setWizard(page.getWizard());
- }
- // ensure that page control has been created
- // (this allows lazy page control creation)
- if (page.getControl() == null) {
- page.createControl(pageContainer);
- // the page is responsible for ensuring the created control is accessable
- // via getControl.
- Assert.isNotNull(page.getControl());
- // ensure the dialog is large enough for this page
- updateSize(page);
- }
- // make the new page visible
- IWizardPage oldPage = currentPage;
- currentPage = page;
- currentPage.setVisible(true);
- if (oldPage != null) {
- oldPage.setVisible(false);
- }
- // update the dialog controls
- update();
- }
也就是在调用WizardPage的createControl()方法之前要做一个判断page.getControl() == null,因此我们只要将想办法在调转到某个WizardPage的时候,将其control设置为null就可以了.于是我们在a WizardPage中引起b WizardPage的内容发生改变的方法中添加如下代码:
java 代码
- // 对参数页必须重绘
- IWizardPage page = getNextPage();
- if (page.getControl() != null)
- page.dispose();
然后复写b WizardPage的dispose方法:
java 代码
- public void dispose() {
- super.dispose();
- setControl(null);
- }
这样我们就大功告成了.
安徽新华电脑学校专业职业规划师为你提供更多帮助【在线咨询】