9910

          單飛

             :: 首頁 :: 聯系 :: 聚合  :: 管理

          公告

          Coding is Everything

          常用鏈接

          留言簿(11)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          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 單飛 閱讀(359) 評論(0)  編輯  收藏 所屬分類: Eclipse Plugin
          主站蜘蛛池模板: 三亚市| 闻喜县| 南昌市| 云南省| 离岛区| 都江堰市| 阳江市| 浦东新区| 庆城县| 九台市| 库车县| 东阳市| 宜黄县| 安国市| 舟曲县| 黄石市| 阳东县| 乐平市| 房产| 广宁县| 林州市| 天门市| 德化县| 家居| 榆林市| 舒兰市| 德昌县| 景宁| 南和县| 蒙自县| 惠安县| 金沙县| 兰西县| 双流县| 朔州市| 常宁市| 荆州市| 四川省| 嘉禾县| 汝南县| 邳州市|