一、前言
本文承接上一节: GEF入门实例_总结_02_新建初始RCP空项目
这一节,我们来给我们的插件加上菜单。
二、基础知识
1.action bar、menubar、coolbar
含义 | |
action bar | 操作条 |
action | 动作。单击菜单、工具栏图标按钮或者按键时执行某项处理 |
menubar | 菜单栏 |
coolbar | 工具栏 |
2.菜单在哪里加
还记得上一节我们新建的类: ApplicationActionBarAdvisor 吗,这个类继承自 ActionBarAdvisor。
我们打开 ActionBarAdvisor 源码,看看它的类注释:
/** * Public base class for configuring the action bars of a workbench window. * <p> * An application should declare a subclass of <code>ActionBarAdvisor</code> * and override methods to configure a window's action bars to suit the needs of the * particular application.
翻译过来就是:
(1) 用于配置工作台窗口的 action bars 的公共基类。
(2) 应用程序应该声明ActionBarAdvisor的子类和重写方法,以配置窗口的 action bar 来满足特定应用程序的需要。
也就是说,我们需要在 ApplicationActionBarAdvisor 类中,通过重写父类的方法,来填充菜单栏。
3.菜单怎么加
注意到我们在第一节中为 ApplicationActionBarAdvisor 类重写了三个方法,就是为这里准备的。
方法名 | 作用 |
makeActions | 生成并注册Action。Action只有注册后才能添加到菜单中 |
fillMenuBar | 填充菜单栏。用Action来填充菜单 |
fillCoolBar | 填充工具栏。用Action来填充工具栏 |
三、准备Action
1、图片
请前往GitHub下载源码,拷贝图片到此工程的icons文件夹下。 传送门:GEF入门实例_总结_01_教程、源码、开发环境准备
注:
Eclipse插件开发时,图片都默认保存在icons文件夹中,请不要修改文件夹名称。
2、图片常量类 IImageConstant
在包 constant 下新建图片常量类 IImageConstant ,用来集中管理程序中用到的图片资源。
package gef.tutorial.step.constant; public interface IImageConstant { public static final String EDITORTITLE = "icons/example.gif"; public static final String NEWHELLOMODEL = "icons/newModel.gif"; public static final String NEWCONNECTION = "icons/newConnection.gif"; public static final String ARROWCONNECTION = "icons/arrowConnection.gif"; }
3、DiagramAction
准备一个Action,它的动作就是:点击的时候,打开一个文件对话框。
新建一个 DiagramAction,
package gef.tutorial.step.action; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.ui.IWorkbenchWindow; import gef.tutorial.step.app.Activator; import gef.tutorial.step.constant.IImageConstant; /** * DiagramAction * * @author shirayner * */ public class DiagramAction extends Action { private final IWorkbenchWindow window; public final static String ID = "gef.tutorial.step.action.DiagramAction"; /** * 一、在构造方法中设置基本属性 * * @param window */ public DiagramAction(IWorkbenchWindow window) { this.window = window; //1.定义该Action的ID. 每一个Action需要一个唯一的ID号 setId(ID); //2.设置该Action的文字。该文字也就是菜单上的文字。"@ALT+D"用来设置该Action的快捷键 setText("&Diagram@ALT+D"); //3.设置工具栏的提示文本 setToolTipText("Draw the GEF diagram."); //4.设置该Action的图片。该方法使用 AbstractUIPlugin 抽象类的 imageDescriptorFromPlugin() 方法快捷地获取图像。 //imageDescriptorFromPlugin()方法需要两个参数:项目ID、图片文件名。 setImageDescriptor(Activator.imageDescriptorFromPlugin( Activator.PLUGIN_ID, IImageConstant.EDITORTITLE)); } /** * 二、在Run方法中设置要执行的动作。 * 单击菜单、工具栏图标按钮或者按键时会执行Action的run方法 * */ @Override public void run() { String path = openFileDialog(); if (path != null) { //弹出一个对话框 MessageDialog.openInformation(window.getShell(), "温馨提示", "文件保存路径为:"+path); } } /** 打开一个文件对话框 * * @return * String 文件路径 */ private String openFileDialog(){ FileDialog dialog = new FileDialog(window.getShell(),SWT.OPEN); dialog.setText("文件保存到"); dialog.setFilterExtensions(new String[] { ".diagram" }); return dialog.open(); } }