通过编程的方式实现菜单
上一节,我们通过配置的方式实现了菜单和工具栏,下面将通过编程的方式实现菜单和工具栏:
第一件事,我们需要创建一个action,这个action继承Action,这里作为示例,该action的作用就是创建一个对话框,代码如下:
public class HelloAction extends Action {
private IWorkbenchWindow window ;
public HelloAction(IWorkbenchWindow window) {
this.window = window ;
this.setText("About!");
}
@Override
public void run() {
MessageBox mb = new MessageBox(window.getShell() ,SWT.OK);
mb.setMessage("Author:lql\nDate:2010-7-25!");
mb.setText("Demo");
mb.open();
}
}
第二件事,就是修改ApplicationActionBarAdvisor这个java文件:
最终代码看起来是这样:
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
private HelloAction helloAction ;
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
protected void makeActions(IWorkbenchWindow window) {
super.makeActions(window);
helloAction = new HelloAction(window);
helloAction.setId("demo.HelloAction");
register(helloAction);
}
protected void fillMenuBar(IMenuManager menuBar) {
super.fillMenuBar(menuBar);
MenuManager demoMenu = new MenuManager("编程实现菜单");
demoMenu.add(helloAction);
menuBar.add(demoMenu);
}
/* (non-Javadoc)
* @see org.eclipse.ui.application.ActionBarAdvisor#fillCoolBar(org.eclipse.jface.action.ICoolBarManager)
*/
@Override
protected void fillCoolBar(ICoolBarManager coolBar) {
IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
coolBar.add(new ToolBarContributionItem(toolbar, "main"));
toolbar.add(helloAction);
}
}
我们来看看这个类,它定义了一个属性HelloAction helloAction,这个就是点击菜单或者工具栏按钮之后执行的动作。
它还包含一个makeActions方法,这个方法就是初始化这些action,并注册。
和菜单栏相关的方法就是fillMenuBar,通过方法名就能够看出来,该方法里面创建了一个MenuManager,这个其实就对应着菜单栏中的
一个菜单,然后demoMenu.add(helloAction) ;该方法就是向刚创建的菜单中添加一个菜单项,然后将这个菜单加到菜单栏中。
和工具栏相关的方法是fillCoolBar,对比上面的菜单创建方法,很容易理解工具栏的创建。
coolBar.add(new ToolBarContributionItem(toolbar, "main"));这行代码的作用就是将工具栏加到窗口中。然后就是向工具栏
中添加了一个工具栏按钮。
下面看下结果:
到此实现菜单的两种方式就结束了。当然还有些细节,以后再摸索。