eclipseRCP深入浅出(学习总结)2015.08.24

公英哲
2023-12-01

chapter 6 

1、 ApplicationWorkbenchWindowAdvisor中的preWindowOpen()方法可以设置顶级菜单可用:

//设置顶级菜单可用,但不设置可见
    configurer.setShowMenuBar(true);

2、只有给顶级菜单添加选项之后才可见,否则就是空的,显示不出来

3、当创建一个RCP应用框架以后,他就生成了一个ActionBarAdvisor的实现类:ApplicationActionBarAdvisor。它有空的makeActions()和fillMenuBar()方法。makeActions()用来创建每一个action,并把它们的对象保存为ApplicationActionBarAdvisor的成员变量。每一个action都需要注册,这样可以确保当窗口关闭时,这些action随之被删除。

protected void makeActions(IWorkbenchWindow window) {
    exitaAction = ActionFactory.QUIT.create(window);
    register(exitaAction);
    aboutAction = ActionFactory.ABOUT.create(window);
    register(aboutAction);
    }

4、workbench定义了许多常用的action,他们可以在RCP应用中重复使用,而且他们都是ActionFactory的内部类。用的时候只需要实例化它们,他们已经被提前设置好了标准的name、id、icon。

protected void fillMenuBar(IMenuManager menuBar) {
    //&后面的才是要显示的名字  第二个参数是id
    MenuManager hyperbolaMenu = new MenuManager("&Hyperbola111","hyperbola");
    hyperbolaMenu.add(exitaAction);
    MenuManager helpMenu = new MenuManager("&Help111","help");
    helpMenu.add(aboutAction);
    menuBar.add(hyperbolaMenu);
    menuBar.add(helpMenu);
    }

5、menu manager用来保存action和子菜单的路径,通过分组,可以创建action的逻辑结构。menu manager让人不用关心菜单是怎么创建的,只用关心你是以何种逻辑结构来组织和展示action:

protected void fillMenuBar(IMenuManager menuBar) {
    //&后面的才是要显示的名字  第二个参数是id
    MenuManager hyperbolaMenu = new MenuManager("&Hyperbola111","hyperbola");
    hyperbolaMenu.add(exitaAction);
    //构造方法中参数是分组名,就是把子菜单看成分组,
    hyperbolaMenu.add(new GroupMarker("other-actions"));//分组1
    hyperbolaMenu.add(new GroupMarker("another-actions"));//分组2
    hyperbolaMenu.appendToGroup("other-actions", aboutAction);//给分组1添加了一个aboutaction
    hyperbolaMenu.appendToGroup("another-actions", aboutAction);//给分组2添加了一个aboutaction
    MenuManager helpMenu = new MenuManager("&Help111","help");
    helpMenu.add(aboutAction);
    menuBar.add(hyperbolaMenu);
    menuBar.add(helpMenu);
    }

6、例如aboutaction和exitaction是任何时候都可以使用的,他们独立于应用程序,但我们需要创建一些在特定时刻起作用,而在其他状态禁用的action:



 类似资料: