`

也说关于WizardPage的动态生成

阅读更多

         在Eclipse中一个Wizard=WizardDialog+Wizard+WizardPage,在这三者中,可以把前者看成后者的容器(container),看看这些类里面的代码就知道,Eclipse自己也是这么认为的,而我们最终看到的东西是WizardPage,在一个Wizard中虽然我们看到的是每一个WizardPage都是在点击next的时候一个一个显示的,但是他们的创建却是在Wizard初始化的时候一起被实例化的,因此这个给我们制造联动效果的WizardPage(也就是后一个WizardPage的内容是根据前面的WizardPage的操作动态生成的)造成了麻烦,不过这个问题也很好解决,这里(http://www.cnblogs.com/bjzhanghao/archive/2007/06/07/775314.html)已经给出了答案.即复写Wizard的createPageControls()方法,给一个空实现即可.
        不过还有另外一个问题没有解决,就是如果我现在一个Wizard中有a,b两个WizardPage,目前我停留在b WizardPage中,我现在点击back回到a WizardPage中,然后对内容做了修改,此次我希望再回到b WizardPage的时候,里面的内容也同时跟着发生改变,但是仅仅是复写Wizard的createPageControls()方法是无法实现,我们通过查看源代码,发现在org.eclipse.jface.wizard.WizardDialog.updateForPage(IWizardPage page)中:

java 代码
  1. private void updateForPage(IWizardPage page) {   
  2.  // ensure this page belongs to the current wizard   
  3.  if (wizard != page.getWizard()) {   
  4.    setWizard(page.getWizard());   
  5.   }   
  6.  // ensure that page control has been created   
  7.  // (this allows lazy page control creation)   
  8.  if (page.getControl() == null) {   
  9.      page.createControl(pageContainer);   
  10.      // the page is responsible for ensuring the created control is accessable   
  11.      // via getControl.   
  12.      Assert.isNotNull(page.getControl());   
  13.      // ensure the dialog is large enough for this page   
  14.      updateSize(page);   
  15.  }   
  16.  // make the new page visible   
  17.  IWizardPage oldPage = currentPage;   
  18.  currentPage = page;   
  19.  currentPage.setVisible(true);   
  20.  if (oldPage != null) {   
  21.    oldPage.setVisible(false);   
  22.   }   
  23.  // update the dialog controls   
  24.  update();   
  25. }   


          也就是在调用WizardPage的createControl()方法之前要做一个判断page.getControl() == null,因此我们只要将想办法在调转到某个WizardPage的时候,将其control设置为null就可以了.于是我们在a WizardPage中引起b WizardPage的内容发生改变的方法中添加如下代码:

java 代码

 

  1. // 对参数页必须重绘   
  2.  IWizardPage page = getNextPage();   
  3.  if (page.getControl() != null)   
  4.   page.dispose();   

          然后复写b WizardPage的dispose方法:

java 代码
  1. public void dispose() {   
  2.  super.dispose();   
  3.     
  4.  setControl(null);   
  5. }   

          这样我们就大功告成了.

分享到:
评论
4 楼 macrochen 2008-09-25  
引用
很希望能与你成为朋友!不知你的QQ或MSN多少?以后还想向你多请教呢。。。

我很久不做eclipse插件了,不好意思,帮不了你了
3 楼 lovezkj 2008-09-25  
不错。。。谢谢。。。
很希望能与你成为朋友!不知你的QQ或MSN多少?以后还想向你多请教呢。。。
2 楼 macrochen 2008-04-10  
ms不能,因为只有nextPage方法,没有显示指定page的方法
1 楼 sparon 2008-04-08  
请教个问题,我现在有个需求是这样的,A、B、C三页面,A提供选择,当用户在A中选择a选项时下一步显示B页面,当用户在A中选择b选项时下一步显示C页面(C还可以有下一步),这个怎么实现呢?

相关推荐

    Eclipse代码生成器插件开发

    Eclipse代码生成器插件开发 在本节中,我们将探讨Eclipse代码生成器插件开发的相关知识点。 一、插件开发基本概念 在Eclipse中,插件是一种可以扩展Eclipse功能的组件。插件可以提供新的功能、视图、编辑器等。要...

    eclipse 中自定义向导(wizard)的实现

    下面是关于自定义向导的设计和实现的详细信息。 概述 ---- 自定义向导(wizard)是通过 org.eclipse.ui.ide.wizard 和 org.eclipse.ui.ide.wizardpage 接口来实现的。每个向导页面都描述了一步任务,向导页面被...

    SWT(JFace) Wizard(Eclipse插件编程必备)

    总的来说,SWT 和 JFace Wizard 在 Eclipse 插件开发中提供了灵活且强大的用户界面构建能力。Wizard 可以帮助开发者创建多步骤的交互流程,使得用户能够更容易地理解和操作复杂任务。在实际开发中,Wizard 可能包括...

    Eclipse向导入门

    \n\n**Wizard类与INewWizard接口**\n\n在新创建的插件项目中,会生成几个类,如`NewXHTMLFileWizard`、`NewXHTMLFileWizardPage`和`Activator`。`NewXHTMLFileWizard`类是实现向导逻辑的主要类,它需要实现`...

    react-simple-wizard:一个简单的分步向导组件

    React简单向导 一个简单的分步向导组件。 用法 具有两个公共方法来导航步骤的父组件: WizardRef.next() // goes to the next step WizardRef.jump(step) // jumps to the desired step 将您的导航组件作为此...

    qt前后端交互,界面的跳转

    每个步骤对应一个WizardPage,用户按顺序完成所有步骤。 3. **QDialog和QMainWindow**:QDialog通常用于弹出对话框,而QMainWindow是主窗口的基础类,两者结合可以实现不同界面间的跳转。 4. **QQuickView和QML**...

    Eclipse 向导设计模式

    它通过一系列的`WizardPage`组件来构建整个向导流程,每个页面都负责展示一部分用户界面,并处理相应的业务逻辑。 ##### 2.1 JFaceWizard原理 - **数据模型**:JFaceWizard中每个页面都可以包含自己的数据模型,但...

    Proc.zip_菜单_Visual_C++_

    标题中的“Proc.zip_菜单_Visual_C++_”表明这是一个关于使用Visual C++进行菜单设计的项目。在这个项目中,开发者可能包含了实现属性页、向导功能以及在菜单栏中展示用户选择信息的代码和资源。Visual C++是微软...

    QT 使用向导对话框

    - **构造函数**:`WizardPage(QWidget *parent = nullptr)`用于创建一个新的向导页面实例。 - **成员函数**: - `void set_text(const QString &title, const QString &subtitle)`:设置页面的标题和副标题。 - `...

    Eclipse首选项开发

    此外,`PreferencePage`类用于表示首选项中的一个页面,类似于向导式对话框中的单个步骤(WizardPage)。`PreferenceNode`代表了首选项界面中的一个节点,它可以链接到一个`PreferencePage`。而`PreferenceManager`...

    eclipse插件开发-铺设一条插件开发普及之路(1-5章).pdf

    - 插件可以动态加载,无需重启Eclipse即可生效。 - **作用**:通过插件,开发者可以根据需要定制自己的开发环境,实现特定的功能需求。 ##### 三、Eclipse插件开发环境与开发入门 - **开发环境搭建**: - 使用...

    qt 界面跳转 界面跳转 界面跳转

    总的来说,QT提供了一系列灵活的工具来实现界面跳转,开发者可以根据需求选择合适的方法。无论是在大型项目还是小型应用中,理解并熟练运用这些技巧都能帮助我们构建更加用户友好的图形界面应用程序。

    SWT/JFACE in Action

    - **WizardPage**: WizardPage是构成向导的基本单元,每个页面可以包含不同的控件和逻辑。 #### 12. 高级特性 - **数据绑定**: JFace支持数据模型与UI元素之间的自动绑定,减少了大量手动同步代码的编写。 - **...

    JFace的源码,从官网下的

    JFace的源码分析可以帮助我们深入理解其内部工作原理,提高开发效率,特别是对于那些需要定制化Eclipse插件或者RCP(Rich Client Platform)应用的开发者来说,研究源码是非常有价值的。 首先,JFace的核心概念包括...

    向导WizardDialog和TitleAreaDialog简单示例

    2. 页面创建:对于`WizardDialog`,需要了解如何创建和添加`WizardPage`,并定义每个页面的UI和逻辑。 3. 控件布局:理解如何使用SWT中的布局管理器(如`GridLayout`、`FormLayout`等)来排列对话框中的控件。 4. ...

    Eclipse Form开发实例代码

    7. **对话框和页**:除了基本的组件外,Eclipse SWT还提供了如`MessageDialog`、`InputDialog`等对话框以及`WizardPage`等高级组件,用于创建更复杂的功能,如文件选择、用户输入验证等。 8. **插件开发**:在...

    Qt多界面跳转解决方案

    QWizard提供了一种分步的界面布局,每一步都是一个WizardPage。用户只能按顺序前进或后退,直到完成所有步骤。 在实际项目中,可能需要结合以上多种方法,根据应用的具体需求灵活运用。同时,为了保持主窗口的稳定...

    eclipse 3.6 rcp 开发

    - 实现addPages()方法以添加WizardPage。 #### 9. 首选项 - **概述**: 首选项用于存储用户的个性化设置。 - **使用首选项**: - 获取PreferenceStore实例。 - 通过set/get方法存储/获取偏好值。 - 实现...

Global site tag (gtag.js) - Google Analytics