Eclipse版本:3.4

Eclipse可以在plugin.xml中创建菜单,可是网上资料不多,经过一番艰苦研究,终于发现了使用 Extentions 创建菜单的方法,步骤如下:
1、 创建菜单 Extentions
2、 org.eclipse.ui.menus 上单击右键,选择 New à menuContribution
3、 Location URI 处输入 menu:org.eclipse.ui.main.menu ,这是根菜单的标志;
4、 创建顶层菜单项
5、 输入菜单信息:
6、 创建子菜单:
7、 填写子菜单信息
8、 现在菜单项创建完毕,但是还不能显示,子菜单项需要与 Action 进行关联,菜单与工具条按钮才可以正常显示。
9、 增加一个 actionSets 扩展:
10、             输入 actionSet 的信息:
11、             actionSet 上单击右键创建 Action
12、             设置 Action 的参数:
主要参数说明:
Label :菜单项上显示的名称,该参数会覆盖对应 menu 扩展的 Label
menubarPath :设置本 Action 关联到哪个菜单项上,需要输入菜单项的全路径,菜单项之间以“ / ”分隔。
toolbarPath :其值为空时将不在工具栏上显示;其值可以是任意字符串,只要值相同则代表了工具栏上具有相似功能的一组按钮,与其它组用分割线隔开。
icon :设置菜单中和工具条上的图片。
class :该 Action 对应的类。
1. ActionSet 下扩展的 menu 的最后运行显示结果与编辑时的菜单顺序相反。
2. ActionSet 下的 menu 可以扩展 separator groupmaker, 主要区别是扩展 separator ,则在各子菜单间以一分隔线隔开; groupmaker 则没。
3. Action 中的 menubarPath 属性(红色),其值必须以“ / ”分开,若置空,则不会在其菜单中显示,更甚的是当此 Action 所在的菜单只有这一个子菜单时,那么这整个菜单都不会显示。
4. Action 中的 toolbarpath 属性(蓝色) , 其值为空时将不在工具栏上显示;其值可以是任意字符串,只要值相同则代表了工具栏上具有相似功能的一组按钮,与其它组用分割线隔开。
5. Action 中的 class 属性(紫色) , 其值一般不要为空。
6. 作为在工具栏上显示的 Action ,只是在作为具有相似功能的按钮组内其顺序与编辑时的顺序相反,而其余整体顺序与编辑时相同。
13、             点击上图的 class 链接,创建 Action 类:
14、             Action 类的示例代码如下:
 
package textviewer.actions;
 
import java.io.File;
 
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
 
public class FileOpen implements IWorkbenchWindowActionDelegate {
 
    private IWorkbenchWindow fWindow ;
 
    @Override
    public void dispose() {
 
    }
 
    @Override
    public void init(IWorkbenchWindow window) {
       fWindow = window;
    }
 
    @Override
    public void run(IAction action) {
       queryFile();
    }
 
    @Override
    public void selectionChanged(IAction action, ISelection selection) {
       // TODO Auto-generated method stub
 
    }
 
    private File queryFile() {
       FileDialog dialog= new FileDialog( fWindow .getShell(), SWT. OPEN );
       dialog.setText( "Open File" ); //$NON-NLS-1$
       String filters[] = { "*.txt" , "*.*" };
       dialog.setFilterExtensions(filters);
       String path= dialog.open();
       if (path != null && path.length() > 0)
           return new File(path);
       return null ;
    }
}
 
15、             效果图如下: