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、
效果图如下:


转载于:https://blog.51cto.com/lancelot/120422