<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    nighty

    折騰的年華
    posts - 37, comments - 143, trackbacks - 0, articles - 0

    一個ActionDelegate代理多個Action

    Posted on 2007-08-15 09:55 寒武紀 閱讀(6228) 評論(0)  編輯  收藏 所屬分類: Eclipse

        以前在做Eclipse插件的時候,習慣一個功能定義一個操作項。比如說在org.eclipse.ui.popupMenus擴展點上,如果有添加這個功能,但是添加的類型有多樣,我們假定現在有添加A、B、C、D四個元素,在擴展點上添加一個viewerContribution擴展,添加四個Action,分別為A、B、C、D。因為這四個添加功能非常相近,所以我們可以只寫一個ActionDelegate,把這四個Action的代理類都指向同一個。但是ID必須區分。聲明定義如下:

     <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>

        上面的主要區別是在id,在所有的代理ActionDelegate中的run(IAction action)方法中都帶有一個參數action,這個參數有個用途就是可以在運行時區別是對應的那個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 自動生成構造函數存根
    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()在識別是對應的那個Action。
       總結:這個途徑可以為插件開發中避免寫過多的ActionDelegate,把一些功能較為接近實現代碼又比較少的操作合并在一起。當然,對于操作步驟比較多的,為了代碼維護的方便,還是建議單獨為它定義一個代理。
          

     



    剛進場的時候戲就落幕
    主站蜘蛛池模板: 2020年亚洲天天爽天天噜| 自拍偷自拍亚洲精品偷一| 中字幕视频在线永久在线观看免费 | 久久精品国产亚洲AV电影网| 国产亚洲精品无码专区 | 亚洲色婷婷综合开心网| 51精品视频免费国产专区| 日韩在线视精品在亚洲| 亚洲视频在线免费观看| 日韩精品视频免费在线观看| 精品国产污污免费网站| 亚洲av无码有乱码在线观看| 亚洲AV无码成人专区片在线观看| 日本高清免费网站| 99久久精品免费视频| 深夜a级毛片免费无码| 亚洲无限乱码一二三四区| 亚洲一区二区精品视频| 四虎成人免费影院网址| 麻豆成人久久精品二区三区免费 | 日韩精品内射视频免费观看| 蜜芽亚洲av无码一区二区三区 | 深夜a级毛片免费无码| 亚洲视频在线观看2018| 亚洲av永久无码精品漫画| 国产精品国产午夜免费福利看| 69pao强力打造免费高清| 国产特黄特色的大片观看免费视频 | 亚洲国产另类久久久精品黑人| 国产三级电影免费观看| 无码日韩人妻av一区免费| 国产99视频精品免费专区| 日本精品久久久久久久久免费| 2020久久精品亚洲热综合一本 | 亚洲精品无码成人片久久不卡| 久热综合在线亚洲精品| 久久久久亚洲精品男人的天堂| 国产国产人免费视频成69大陆 | 亚洲精品乱码久久久久久下载| 亚洲精品无码mv在线观看网站| 免费**毛片在线播放直播|