很久很久以前

            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

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


          網站導航:
           
          主站蜘蛛池模板: 朔州市| 沅江市| 连平县| 团风县| 巩义市| 会东县| 葫芦岛市| 搜索| 满城县| 连城县| 南华县| 河西区| 遂川县| 乌海市| 阳泉市| 怀仁县| 娱乐| 三亚市| 遂川县| 涞水县| 丁青县| 鄱阳县| 民丰县| 合作市| 成武县| 兴安盟| 丰顺县| 池州市| 曲松县| 南开区| 武陟县| 本溪| 桂东县| 马尔康县| 高尔夫| 乌拉特前旗| 兴业县| 都江堰市| 永善县| 尚义县| 镇原县|