关于RCP中使用系统resource navigator图标和项目名称不显示的问题

首先说明: 这个是不推荐使用的方法,并且现在有了common navigator。

最近毕业设计需要这个东西,所以一直在看。之所以 不使用common navigator,第一是由于时间有限(毕业设计的时间只有一个月多了,现在基本还没有开始做,只是在做一些技术上的验证),所以先使用系统提供的东西 把功能性的东西实现,以后再进行优化;第二能力有限(呵呵),看了两天common navigator的用法,发现需要自己实现的东西太多了,两天也没有理出个头绪,所以决定先不实现自己的navagator 了。

这个方法转自eclipseworld:

[FAQ] ResourceNavigator 中不显示项目 / 文件名称和图片 .

Q: 在使用 Eclipse 提供的 ResourceNavigator (它是 IDE plugin 的一部分),在 Navigator 里新建的项目和文件时不显示名称和图片 , 怎么办 ?

A:
目前这个 ResourceNavigator 不被鼓励用在 RCP 程序里,以后版本的 Eclipse 可能会提供更合适的插件。当前解决方法为 , WorkbenchAdvisor 方法中加入下面的代码 :

  public   void  preStartup()  ... {
  
//  注册Workbench变量
  WorkbenchAdapterBuilder.registerAdapters();
  
//  声明Workbench图片
  declareWorkbenchImages();
}


private   void  declareWorkbenchImages()  ... {

  
final  String ICONS_PATH  =   " $nl$/icons/full/ " ; // $NON-NLS-1$
   final  String PATH_ELOCALTOOL  =  ICONS_PATH  +   " elcl16/ " ;
  
//  Enabled toolbar icons. // $NON-NLS-1$
   final  String PATH_ETOOL  =  ICONS_PATH  +   " etool16/ " //  Enabled toolbar icons. // $NON-NLS-1$
   final  String PATH_DTOOL  =  ICONS_PATH  +   " dtool16/ " //  Disabled toolbar icons. // $NON-NLS-1$
   final  String PATH_OBJECT  =  ICONS_PATH  +   " obj16/ " //  Model object icons // $NON-NLS-1$
   final  String PATH_WIZBAN  =  ICONS_PATH  +   " wizban/ " //  Wizard icons // $NON-NLS-1$

  Bundle ideBundle 
=  Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);

  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC, PATH_ETOOL 
+   " build_exec.gif " false );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_HOVER, PATH_ETOOL  +   " build_exec.gif " false );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_DISABLED, PATH_DTOOL  +   " build_exec.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC, PATH_ETOOL 
+   " search_src.gif " false );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_HOVER, PATH_ETOOL  +   " search_src.gif " false );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_DISABLED, PATH_DTOOL  +   " search_src.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_NEXT_NAV, PATH_ETOOL 
+   " next_nav.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_PREVIOUS_NAV, PATH_ETOOL 
+   " prev_nav.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWPRJ_WIZ, PATH_WIZBAN 
+   " newprj_wiz.gif " false );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFOLDER_WIZ, PATH_WIZBAN  +   " newfolder_wiz.gif " false );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFILE_WIZ, PATH_WIZBAN  +   " newfile_wiz.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTDIR_WIZ, PATH_WIZBAN 
+   " importdir_wiz.gif " false );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTZIP_WIZ, PATH_WIZBAN  +   " importzip_wiz.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTDIR_WIZ, PATH_WIZBAN 
+   " exportdir_wiz.gif " false );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTZIP_WIZ, PATH_WIZBAN  +   " exportzip_wiz.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle,

  IDEInternalWorkbenchImages.IMG_WIZBAN_RESOURCEWORKINGSET_WIZ, PATH_WIZBAN 
+   " workset_wiz.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_DLGBAN_SAVEAS_DLG, PATH_WIZBAN 
+   " saveas_wiz.gif " false );  // $NON-NLS-1$

  declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT, PATH_OBJECT 
+   " prj_obj.gif " true );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT  +   " cprj_obj.gif " true );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OPEN_MARKER, PATH_ELOCALTOOL  +   " gotoobj_tsk.gif " true );  // $NON-NLS-1$

  
//  task objects

  declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_TASK_TSK, PATH_OBJECT 
+   " taskmrk_tsk.gif " true );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_BKMRK_TSK, PATH_OBJECT  +   " bkmrk_tsk.gif " true );  // $NON-NLS-1$

  String string 
=  IDEInternalWorkbenchImages.IMG_OBJS_COMPLETE_TSK;
  declareWorkbenchImage(ideBundle, string, PATH_OBJECT 
+   " complete_tsk.gif " true );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_INCOMPLETE_TSK, PATH_OBJECT  +   " incomplete_tsk.gif " true );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_ITEM, PATH_OBJECT  +   " welcome_item.gif " true );  // $NON-NLS-1$
  declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_BANNER, PATH_OBJECT  +   " welcome_banner.gif " true );  // $NON-NLS-1$
}


private   void  declareWorkspaceImage(Bundle ideBundle, String symbolicName, String path,  boolean  shared)  ... {
  URL url 
=  Platform.find(ideBundle,  new  Path(path));
  ImageDescriptor desc 
=  ImageDescriptor.createFromURL(url);
  getWindowConfigurer().getWorkbenchConfigurer().declareImage(symbolicName, desc, shared);
}



当然,你还要在 plugin dependencies 里加上 org.eclipse.ui.ideorg.eclipse.ui.views ,所以你的 RCP 程序会变得更大,这就是代价。

 

 

(注:以上是原帖,但个人发现有两个错误:1、最后一个方法名称应该为declareWorkbenchImage ,这个就是前面被调用了n次的方法,这个应该是原作者笔误;2、最后一个方法的最后一条语句:如果是在类workbenchadvisor中调用的话,应该去掉前面的getWindowConfigure,直接

getWorkbenchConfigurer().declareImage(symbolicName, desc, shared)

另外,上面有些东西应该是用不到的,可以去掉,不过我没有验证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值