<source id="4vppl"><ins id="4vppl"></ins></source>
<u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
<object id="4vppl"></object>
  • <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

    <object id="4vppl"></object>
    <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

      <i id="4vppl"><thead id="4vppl"></thead></i>

      <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>

      當(dāng)前位置:首頁(yè) > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > 也說(shuō)關(guān)于WizardPage的動(dòng)態(tài)生成

      也說(shuō)關(guān)于WizardPage的動(dòng)態(tài)生成
      2010-01-14 23:03:42  作者:  來(lái)源:
        在Eclipse中一個(gè)Wizard=WizardDialog+Wizard+WizardPage,在這三者中,可以把前者看成后者的容器(container),看看這些類里面的代碼就知道,Eclipse自己也是這么認(rèn)為的,而我們最終看到的東西是WizardPage,在一個(gè)Wizard中雖然我們看到的是每一個(gè)WizardPage都是在點(diǎn)擊next的時(shí)候一個(gè)一個(gè)顯示的,但是他們的創(chuàng)建卻是在Wizard初始化的時(shí)候一起被實(shí)例化的,因此這個(gè)給我們制造聯(lián)動(dòng)效果的WizardPage(也就是后一個(gè)WizardPage的內(nèi)容是根據(jù)前面的WizardPage的操作動(dòng)態(tài)生成的)造成了麻煩,不過(guò)這個(gè)問(wèn)題也很好解決,這里(http://www.cnblogs.com/bjzhanghao/archive/2007/06/07/775314.html)已經(jīng)給出了答案.即復(fù)寫Wizard的createPageControls()方法,給一個(gè)空實(shí)現(xiàn)即可.
              不過(guò)還有另外一個(gè)問(wèn)題沒(méi)有解決,就是如果我現(xiàn)在一個(gè)Wizard中有a,b兩個(gè)WizardPage,目前我停留在b WizardPage中,我現(xiàn)在點(diǎn)擊back回到a WizardPage中,然后對(duì)內(nèi)容做了修改,此次我希望再回到b WizardPage的時(shí)候,里面的內(nèi)容也同時(shí)跟著發(fā)生改變,但是僅僅是復(fù)寫Wizard的createPageControls()方法是無(wú)法實(shí)現(xiàn),我們通過(guò)查看源代碼,發(fā)現(xiàn)在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. }   


       

                也就是在調(diào)用WizardPage的createControl()方法之前要做一個(gè)判斷page.getControl() == null,因此我們只要將想辦法在調(diào)轉(zhuǎn)到某個(gè)WizardPage的時(shí)候,將其control設(shè)置為null就可以了.于是我們?cè)赼 WizardPage中引起b WizardPage的內(nèi)容發(fā)生改變的方法中添加如下代碼:

      java 代碼

       

       
      1. // 對(duì)參數(shù)頁(yè)必須重繪   
      2.  IWizardPage page = getNextPage();   
      3.  if (page.getControl() != null)   
      4.   page.dispose();   

                然后復(fù)寫b WizardPage的dispose方法:
       

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

                這樣我們就大功告成了.


      安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
      国产午夜福三级在线播放_亚洲精品成a人片在线观看_亚洲自慰一区二区三区_久久棈精品久久久久久噜噜
      <source id="4vppl"><ins id="4vppl"></ins></source>
      <u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
      <object id="4vppl"></object>
    1. <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

      <object id="4vppl"></object>
      <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

        <i id="4vppl"><thead id="4vppl"></thead></i>

        <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>
        亚洲成a人片在线观看专区 在线观看AV中文字幕不卡 | 日韩精品一品道精品在线观看 | 色花堂国产精品第一页 | 日韩欧美另类亚洲中文字幕 | 尹人香蕉综合网在线观看 | 日韩高清亚洲日韩精品一区二区三区 |