love fish大鵬一曰同風(fēng)起,扶搖直上九萬里

          常用鏈接

          統(tǒng)計

          積分與排名

          friends

          link

          最新評論

          一個ActionDelegate代理多個Action

          以前在做Eclipse插件的時候,習(xí)慣一個功能定義一個操作項。比如說在org.eclipse.ui.popupMenus擴展點上,如果有添加這個功能,但是添加的類型有多樣,我們假定現(xiàn)在有添加A、B、C、D四個元素,在擴展點上添加一個viewerContribution擴展,添加四個Action,分別為A、B、C、D。因為這四個添加功能非常相近,所以我們可以只寫一個ActionDelegate,把這四個Action的代理類都指向同一個。但是ID必須區(qū)分。聲明定義如下:
           <viewerContribution
                      
          id="test.viewerContribution1"
                      targetID
          ="test.testView" >
                   
          <action
                         
          class="test.AddTestDelegate"
                         id
          ="add.a"
                         label
          ="A"
                         menubarPath
          ="test"/>
                   
          <action
                         
          class="test.AddTestDelegate"
                         id
          ="add.b"
                         label
          ="B"
                         menubarPath
          ="test"/>
                   
          <action
                         
          class="test.AddTestDelegate"
                         id
          ="add.c"
                         label
          ="C"
                         menubarPath
          ="test"/>
                   
          <action
                         
          class="test.AddTestDelegate"
                         id
          ="add.d"
                         label
          ="D"
                         menubarPath
          ="test"/>
                
          </viewerContribution>

              上面的主要區(qū)別是在id,在所有的代理ActionDelegate中的run(IAction action)方法中都帶有一個參數(shù)action,這個參數(shù)有個用途就是可以在運行時區(qū)別是對應(yīng)的那個action。下面我們看一下AddTestDelegate類的定義:

           1package test;
           2
           3import org.eclipse.jface.action.IAction;
           4import org.eclipse.jface.viewers.ISelection;
           5import org.eclipse.ui.IViewActionDelegate;
           6import org.eclipse.ui.IViewPart;
           7
           8public class AddTestDelegate implements IViewActionDelegate {
           9
          10    private IViewPart view;
          11    public AddTestDelegate() {
          12        // TODO 自動生成構(gòu)造函數(shù)存根
          13    }

          14
          15    public void init(IViewPart view) {
          16        this.view = view;
          17
          18    }

          19
          20    public void run(IAction action) {
          21        String id = action.getId();
          22        
          23        if(id.equals("add.a")){
          24            //TODO
          25        }
          else if(id.equals("add.b")){
          26            //TODO
          27        }
          else if(id.equals("add.c")){
          28            //TODO
          29        }
          else if(id.equals("add.d")){
          30            //TODO
          31        }

          32
          33    }

          34
          35    public void selectionChanged(IAction action, ISelection selection) {
          36        // TODO 自動生成方法存根
          37
          38    }

          39
          40}

              我們可以在運行時通過action.getId()在識別是對應(yīng)的那個Action。
             總結(jié):這個途徑可以為插件開發(fā)中避免寫過多的ActionDelegate,把一些功能較為接近實現(xiàn)代碼又比較少的操作合并在一起。當(dāng)然,對于操作步驟比較多的,為了代碼維護的方便,還是建議單獨為它定義一個代理。
                

          posted on 2007-10-31 08:59 liaojiyong 閱讀(896) 評論(0)  編輯  收藏 所屬分類: Eclipse

          主站蜘蛛池模板: 铁岭市| 新蔡县| 浏阳市| 晋江市| 双城市| 湟源县| 那坡县| 北海市| 北安市| 鹰潭市| 罗甸县| 三江| 连江县| 红安县| 呈贡县| 台中市| 龙胜| 玉屏| 丰镇市| 军事| 甘德县| 荃湾区| 兴海县| 凌云县| 新乡县| 无锡市| 内丘县| 金沙县| 招远市| 鞍山市| 台东县| 鄢陵县| 东光县| 雷波县| 武川县| 儋州市| 陆良县| 离岛区| 徐水县| 古丈县| 商洛市|