服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

rcp ii:扩展通用工作台补充―小的改进


  1、改进原因及内容
  searchview视图的license key按钮不是很明显,所以在file菜单中增加license key菜单项,提供相同的功能
  
  程序没有提供打开视图的功能,在视图关闭后就无法打开了,所以增加view菜单提供打开视图的功能
  
  菜单的使用分两步:
  
  定义动作来实现具体功能
  
  将动作加到menumanager中,由menumanager来自动管理
  
  2、定义动作
  (1)license key菜单项对应的动作
  
  package com.xqtu.google.actions;
  
  import org.eclipse.jface.action.action;
  import org.eclipse.jface.wizard.wizarddialog;
  import org.eclipse.ui.iworkbenchwindow;
  
  import com.xqtu.google.wizards.licensekeywizard;
  
  public class licensekeymenuaction extends action {
  
  private iworkbenchwindow window;
  
  public licensekeymenuaction(iworkbenchwindow window) {
  this.window = window;
  settext("license &key...@ctrl+k");
  }
  
  public void run() {
  licensekeywizard wizard = new licensekeywizard();
  wizarddialog dialog = new wizarddialog(window.getshell(), wizard);
  dialog.open();
  }
  }
  普通动作需要扩展action类(实现iaction接口的缺省基类),并且重写run方法来实现动作要完成的特定功能
  
  动作类通常在其构造方法中进行一些属性的初始化工作,如settext方法设置动作相关的文本,在菜单中表现为菜单项文本
  
  动作类在其构造方法中做的另一件事是保存window级(如iworkbenchwindow)的引用,以便在后面的run方法中使用
  
  run方法实现了与searchview视图相同的功能:打开向导窗口
  
  (2)显示视图的动作
  
  package com.xqtu.google.actions;
  
  import org.eclipse.jface.action.action;
  import org.eclipse.ui.iworkbenchpage;
  import org.eclipse.ui.iworkbenchwindow;
  import org.eclipse.ui.partinitexception;
  
  public class viewaction extends action {
  
  private iworkbenchwindow window;
  
  private string viewid;
  
  public viewaction(iworkbenchwindow window, string viewid) {
  this.window = window;
  this.viewid = viewid;
  settext("show " + viewid.substring(viewid.lastindexof(".") + 1));
  }
  
  public void run() {
  iworkbenchpage[] pages = window.getpages();
  for (int i = 0, len = pages.length; i < len; i++) {
  try {
  pages[i].showview(viewid);
  break;
  } catch (partinitexception piex) {
  continue;
  }
  }
  }
  }
  viewaction类的实现方法和licensekeymenuaction类是一样的,不同的是构造方法中多了viewid参数,用来接收视图id
  
  菜单项是根据视图id生成的(不是很妥)
  
  在run方法中,先获得workbenchwindow中的workbenchpage,然后调用workbenchpage的showview方法显示对应视图id的视图(感觉for循环写得不是很好,但暂时没有想到别的方法)
  
  3、将动作加到menumanager中
  修改googleworkbenchadvisor类的fillactionbars方法,将动作加到menumanager中
  
  public void fillactionbars(iworkbenchwindow window,
  iactionbarconfigurer configurer, int flags) {
  
  imenumanager menubar = configurer.getmenumanager();
  
  menumanager filemenu = new menumanager("&file",
  iworkbenchactionconstants.m_file);
  filemenu.add(new groupmarker(iworkbenchactionconstants.file_start));
  filemenu.add(new groupmarker(iworkbenchactionconstants.mb_additions));
  filemenu.add(new licensekeymenuaction(window));
  filemenu.add(actionfactory.quit.create(window));
  filemenu.add(new groupmarker(iworkbenchactionconstants.file_end));
  menubar.add(filemenu);
  
  menumanager viewmenu = new menumanager("&view");
  viewmenu.add(new viewaction(window, browserview.id));
  viewmenu.add(new viewaction(window, searchview.id));
  menubar.add(viewmenu);
  }

扫描关注微信公众号