這兩天在配置一個(gè)CNF導(dǎo)航視圖時(shí)候發(fā)現(xiàn)快捷鍵delete、past、copy等都失效了,折騰良久,搞清楚了;

1.快捷鍵要想能在菜單右邊顯示出來:
deleteAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_DELETE);2.要想生效必須綁定handler:@Override public void fillActionBars(final IActionBars actionBars) { if (textActionHandler == null) { textActionHandler = new TextActionHandler(actionBars); // hook // handlers } textActionHandler.setCopyAction(copyAction); textActionHandler.setPasteAction(pasteAction); textActionHandler.setDeleteAction(deleteAction); // renameAction.setTextActionHandler(textActionHandler); updateActionBars(); textActionHandler.updateActionBars(); }public void updateActionBars() { actionBars.setGlobalActionHandler(ActionFactory.CUT.getId(), textCutAction); actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), textCopyAction);actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), textPasteAction); actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), textSelectAllAction); actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), textDeleteAction); }setGlobalActionHandler把id和action綁定到一塊;這里你發(fā)現(xiàn)綁定的action并不是自己那個(gè)action,是texthandler中的action;
如果想強(qiáng)制生效可以直接把這個(gè)action換成我們那個(gè)action;
3.推薦的解決方法:
之所以不生效,是因?yàn)橄到y(tǒng)找不到action對(duì)應(yīng)的commandid,我們可以綁定:
PRotected void makeActions() { clipboard = new Clipboard(shell.getDisplay()); ... deleteAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_DELETE); initActionCommandMappingService(); } /** * 快捷鍵綁定actionBars.setGlobalActionHandler(); * 這里使用了textActionHandler.updateActionBars();所以綁定的是textActionHandler中text*Action,而不是這里的action; * 方法一:重新設(shè)置setGlobalActionHandler為這里的action; * 方法二:ActionCommandMappingService中添加這里的action映射WorkbenchCommandConstants.EDIT_* */ private void initActionCommandMappingService() { final IActionCommandMappingService actionCommandMappingService = (IActionCommandMappingService) CommonUIPlugin.getDefault().getWorkbench() .getActiveWorkbenchWindow().getService(IActionCommandMappingService.class); final String idDelete = actionCommandMappingService.getCommandId(ActionFactory.DELETE.getId()); if (idDelete == null) { actionCommandMappingService.map(ActionFactory.DELETE.getId(), IWorkbenchCommandConstants.EDIT_DELETE); } final String idCopy = actionCommandMappingService.getCommandId(ActionFactory.COPY.getId()); if (idCopy == null) { actionCommandMappingService.map(ActionFactory.COPY.getId(), IWorkbenchCommandConstants.EDIT_COPY); } final String idPast = actionCommandMappingService.getCommandId(ActionFactory.PASTE.getId()); if (idPast == null) { actionCommandMappingService.map(ActionFactory.PASTE.getId(), IWorkbenchCommandConstants.EDIT_PASTE); } }這樣問題就解決了
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注