9910

          單飛

             :: 首頁 :: 聯系 :: 聚合  :: 管理
          MultiPageEditorPart 的addPage方法
          public int addPage(Control control)
              {
                  
          int i = getPageCount();
                  addPage(i, control);
                  
          return i;
              }

              
          public void addPage(int i, IEditorPart ieditorpart, IEditorInput ieditorinput)
                  
          throws PartInitException
              {
                  IEditorSite ieditorsite 
          = createSite(ieditorpart);
                  ieditorpart.init(ieditorsite, ieditorinput);
                  Composite composite 
          = new Composite(getContainer(), getOrientation(ieditorpart));
                  composite.setLayout(
          new FillLayout());
                  ieditorpart.createPartControl(composite);
                  ieditorpart.addPropertyListener(
          new IPropertyListener() {

                      
          public void propertyChanged(Object obj, int j)
                      {
                          handlePropertyChange(j);
                      }

                  }
          );
                  CTabItem ctabitem 
          = createItem(i, composite);
                  ctabitem.setData(ieditorpart);
                  nestedEditors.add(ieditorpart);
              }

          那么有辦法把一個EditorPart 加入Composite再放到Page里面呢?
          public void addHtmlPage(IEditorPart ieditorpart, IEditorInput ieditorinput) throws PartInitException {
                  
          final SashForm sashForm = new SashForm(getContainer(), SWT.NONE);
                  
                  
          final Composite pageContainer = new Composite(sashForm, SWT.NONE);
                  sashForm.setSashWidth(
          1);
                  
                  
          final Composite resultContainer = new Composite(sashForm, SWT.NONE);
                  resultContainer.setLayout(
          new FillLayout());
                  
                  sashForm.setWeights(
          new int[] {11 });        
                  createAnalyzePage(resultContainer);
                  
                  IEditorSite ieditorsite 
          = createSite(ieditorpart);
                  ieditorpart.init(ieditorsite, ieditorinput);

                  pageContainer.setLayout(
          new FillLayout());
                  ieditorpart.createPartControl(pageContainer);
                  ieditorpart.addPropertyListener(
          new IPropertyListener() {

                      
          public void propertyChanged(Object obj, int j) {
                          handlePropertyChange(j);
                      }

                  });
                  
                  
                  
          int index = addPage(sashForm);
                  setPageText(index, 
          "html");
              }
          視乎這樣就可以了,但是問題出現了.缺少了父類nestedEditors.add(ieditorpart);對editor生命周期的管理.導致屬性編輯器出問題.怎么解決呢?
              private CTabFolder container;
              
          private ArrayList nestedEditors;

          MultiPageEditorPart 聲明的都是私有的屬性,按照面向對象的設計是不能被繼承者訪問的.
          那怎么辦呢?這時候就該使用錘子了."Reflect"

          CTabFolder container = (CTabFolder) getParentFileValue(MultiPageEditorPart.class,(MultiPageEditorPart)this"container");
                  CTabItem ctabitem 
          = new CTabItem(container, 0, i);
                  ctabitem.setControl(composite);
                  ctabitem.setData(ieditorpart);
                  ArrayList nestedEditors 
          = (ArrayList) getParentFileValue(MultiPageEditorPart.class,(MultiPageEditorPart)this"nestedEditors");
                  nestedEditors.add(ieditorpart);

          public static Object getParentFileValue(Class parentClassType,Object object, String filedName) {
                  Field fild = null;
                  Object fildValue = null;
                  try {
                      fild = parentClassType.getDeclaredField(filedName);
                      fild.setAccessible(true);// 設置安全檢查,訪問私有成員變量必須
                      fildValue = fild.get(object);

                  } catch (NoSuchFieldException ex) {
                      ex.printStackTrace();
                  } catch (Exception ex) {
                      ex.printStackTrace();
                  }
                  return fildValue;
              }

          呵呵,問題解決了.

          posted on 2009-05-27 10:31 單飛 閱讀(358) 評論(0)  編輯  收藏 所屬分類: Eclipse Plugin
          主站蜘蛛池模板: 阆中市| 泗水县| 天台县| 平原县| 德令哈市| 安图县| 内黄县| 孟津县| 交口县| 延寿县| 东乡族自治县| 榆林市| 甘洛县| 孟津县| 甘肃省| 沾化县| 巴里| 平南县| 肥东县| 习水县| 南和县| 荥经县| 宣化县| 星子县| 秦安县| 德惠市| 信宜市| 楚雄市| 观塘区| 肥乡县| 三河市| 甘南县| 青浦区| 泗洪县| 兴安盟| 九寨沟县| 梧州市| 江西省| 山阴县| 六枝特区| 修武县|