很久很久以前

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            34 隨筆 :: 4 文章 :: 17 評論 :: 0 Trackbacks
          最近做的gef編輯器在刪除時遇到了一些問題,就是不能通過delete鍵刪除,到處搜集資料,解決了,
          首先需要在相應rcp工程中的ActionBarAdviser類中注冊相應的Action,比如對應于deleteAction,我在方法org.eclipse.ui.application.ActionBarAdvisor#makeAction(IWorkbenchWindow)中注冊deleteAction,如下:
          protected?void?makeAction(final?IWorkbenchWindow?window){
          ????IAction?delAction?
          =?ActionFactory.DELETE.create(window);
          ????register(delAction);
          }


          只是這么設置還是不能刪除相應的圖形元素,需要在相應的編輯器中重載init方法,添加如下的代碼
          public?void?init(IEditorSite?site,?IEditorInput?input)?throws?PartInitException?{
          ????
          //?TODO?Auto-generated?method?stub
          ????super.init(site,?input);
          ????ActionRegistry?registry?
          =?getActionRegistry();
          ????IActionBars?bar?
          =?site.getActionBars();
          ????String?id?
          =?ActionFactory.DELETE.getId();
          ????bar.setGlobalActionHandler(id,registry.getAction(id));
          ????bar.updateActionBars();
          }

          在這里仔細研究會發現,在第一段代碼中實際上時創建了一個action,這是一個RetargetAction,而在super.init()方法會調用一個createAction方法,這里創建的是gef默認的redoAction?undoAction selectionAction deleteAction saveAction.需要注意的是RetargetAction是一種可以跟蹤當前活動的部分,由于retargetAction含有一個id,如果這個活動部分提供的handler的id和retargetAction的id相同,那么相應的對retargetAction的調用就轉嫁成對當前這個活動部分的handle的調用,(當然如果根本就沒有handle,那么這個action會disable).所以,我們可以看出來,這個retargetAction會在gef編輯器激活后調用gef的deleteAction.
          posted on 2006-08-19 17:35 Long Long Ago 閱讀(1209) 評論(0)  編輯  收藏 所屬分類: RCPGEFEclipse

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 栾川县| 乾安县| 乌兰浩特市| 高碑店市| 柳河县| 甘德县| 安龙县| 东辽县| 革吉县| 襄城县| 都江堰市| 抚顺县| 清新县| 昆明市| 长海县| 离岛区| 司法| 都安| 定边县| 临清市| 涡阳县| 汕头市| 黄浦区| 钟祥市| 阳曲县| 紫金县| 娱乐| 民县| 巨鹿县| 沅江市| 当阳市| 安龙县| 阿拉善左旗| 古蔺县| 台州市| 沅江市| 五华县| 广南县| 榕江县| 武山县| 张家川|