邋遢居

          我的Java天堂

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

                                                                  RCP學(xué)習(xí)筆記(一) Viewer合作類的模式

          Viewer是邏輯對(duì)象(或叫做領(lǐng)域模型)和顯示對(duì)象之間的一個(gè)橋梁。他的主要的任務(wù)就是根據(jù)邏輯對(duì)象來填充窗體組件。一般需要三個(gè)類來完成Business Object 在窗體組件中的顯示。我們這里同過使用TableView來演示這部分的功能。

          TableViewer的責(zé)任是用特定的對(duì)象填充到Table窗體組件中。是我們最終在窗體要看到的對(duì)象。如下圖所示的一部分:
          tableviewer.gif

          IStructuredContentProviderITableLabelProvider的實(shí)現(xiàn)類是用來幫助TableViewer來完成這個(gè)任務(wù)的。

          1、  IStructuredContentProvider的任務(wù)是“根據(jù)給定的對(duì)象,返回一個(gè)對(duì)應(yīng)的領(lǐng)域?qū)ο蟆?/span>1。是通過:public Object[] getElements(Object arg0)2方法實(shí)現(xiàn)的。

          2、  ITableLabelProvider 的任務(wù)是“返回展現(xiàn)領(lǐng)域?qū)ο蟮乃璧膱D標(biāo)和文字”。這兩個(gè)任務(wù)分別是通過public Image getColumnImage(Object element, int columnIndex);

          public String getColumnText(Object element, int columnIndex);這兩個(gè)方法實(shí)現(xiàn)的。他們的傳入?yún)?shù)都是:Object element, int columnIndexElement表示當(dāng)前行所要展現(xiàn)的數(shù)據(jù)對(duì)象,columnIndex表示的當(dāng)前處理的列號(hào),他是從零開始記的。

          知道了他們之間分配的職能后,我們就可以看看他們是怎么協(xié)作的了。在TableView的需要顯示的輸入對(duì)象改變了(調(diào)用了setInput方法可以觸發(fā)待顯示領(lǐng)域?qū)ο蟮母淖儯@就會(huì)觸發(fā)TableViewInputChange事件,這時(shí)候TableView就會(huì)去調(diào)用他本身的refresh3方法。最終會(huì)在getRawChildren方法中調(diào)用IStructuredContentProvider實(shí)現(xiàn)類中的getElements方法或的一個(gè)Object[]。供以后創(chuàng)建Item時(shí)使用。整個(gè)調(diào)用過程可以用下面的strack圖來表示:
          gettreetrack.gif
          通過調(diào)用IStructuredContentProvider獲的了一個(gè)對(duì)象數(shù)組后,就會(huì)根據(jù)對(duì)象數(shù)組來創(chuàng)建顯示的Item。我們可以先看一下ITableLabelProviderTableLabelProviderITableLabelProvider的一個(gè)實(shí)現(xiàn)類)。createItem.gif

          在更新Item的時(shí)候提供每個(gè)TableView需要的TextImage就好了。他們最終在TableViewerdoUpdateItem方法中調(diào)用ITableLabelProvidergetColumnTextgetColumnImage方法。

           

          要實(shí)現(xiàn)一個(gè)在TableView中顯示特定對(duì)象只需要實(shí)現(xiàn)IStructuredContentProvider實(shí)現(xiàn)類的getElements方法。和ITableLabelProvidergetColumnText方法。

          下面是我示例中的代碼:

          TableLabelPrivatetablelable.gif

          TableContentPrivate
          contentprivate.gif




          Viewer也都是采用ContentProvideLabelProvide的協(xié)作方式來工作。

          其他的

          參考文獻(xiàn):

          1、  Contributing to Eclipse 中文版 Page 290

          2、  org.eclipse.jface.viewers. IStructuredContentProvider.java

          3、  這個(gè)方法繼承自StructuredViewer。可參考StructuredViewer.java



          posted on 2005-12-11 11:24 Jet Geng 閱讀(1818) 評(píng)論(0)  編輯  收藏 所屬分類: Eclipse
          主站蜘蛛池模板: 杭州市| 萍乡市| 永城市| 芜湖市| 镇原县| 五河县| 丹江口市| 沅陵县| 商丘市| 阿鲁科尔沁旗| 泰兴市| 平遥县| 兴仁县| 玉山县| 额尔古纳市| 拉萨市| 金川县| 太仓市| 武鸣县| 阜康市| 汾西县| 登封市| 昆明市| 武山县| 连江县| 荆州市| 沾益县| 广南县| 罗平县| 金塔县| 新河县| 闵行区| 横峰县| 靖江市| 建昌县| 黄陵县| 博罗县| 东阳市| 天津市| 新宾| 凭祥市|