接上篇《Eclipse 插件開發實戰(一):創建首個插件專案》,本文詳細講解如何在插件中添加菜單欄菜單、工具欄按鈕、右鍵彈出菜單,並通過 Commands 框架 實現聲明式處理器綁定。
| 擴展點 ID | 職責 | 關鍵屬性 |
|---|---|---|
org.eclipse.ui.menus | 定義菜單結構與位置 | menuContribution、menu、command |
org.eclipse.ui.commands | 聲明語義命令(做什麼) | command、id、name |
org.eclipse.ui.handlers | 提供命令具體實現(怎麼做) | handler、commandId、class |
關係鏈:Menu →(引用)Command →(綁定)Handler。一個 Command 可被多個 Menu 引用,一個 Command 僅綁定一個 Handler(可通過 activeWhen 切換)。
package com.example.menu.handler;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.dialogs.MessageDialog;
public class SampleHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
MessageDialog.openInformation(
null, "測試插件", "測試右鍵彈出菜單成功!");
return null;
}
}
plugin.xml → Extensions 頁籤 → Add... → 搜索並添加三個擴展點。id=com.example.cmd.popup, name=彈出測試。commandId=com.example.cmd.popup, class=com.example.menu.handler.SampleHandler。locationURI=popup:common.new.menu?after=additions(右鍵菜單) → New Menu → id=com.example.menu.popup, label=測試菜單 → New Command → commandId=com.example.cmd.popup。常用 locationURI:
menu:org.eclipse.ui.main.menutoolbar:org.eclipse.ui.main.toolbarpopup:common.new.menu 或特定視圖 ID(如 popup:org.eclipse.ui.navigator.ProjectExplorer)。MessageDialog,證明 Handler 執行成功。enabledWhen / activeWhen,結合 with、iterate、adapt 表達式,根據選中資源類型控制菜單可見性。icon 屬性指向插件內圖標路徑(icons/sample.png)。org.eclipse.ui.bindings,為 Command 分配默認快捷鍵(如 Ctrl+Shift+T)。locationURI 拼寫錯誤導致菜單不顯示,建議用 Plugin Spy (Alt+Shift+F1) 定位目標容器 ID。activeWhen 互斥,否則啟動報錯。