首先说明: 这个是不推荐使用的方法,并且现在有了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();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
private
void
declareWorkbenchImages()
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
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);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
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,
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
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$
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
// 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$
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
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.ide 和 org.eclipse.ui.views ,所以你的 RCP 程序会变得更大,这就是代价。
(注:以上是原帖,但个人发现有两个错误:1、最后一个方法名称应该为declareWorkbenchImage ,这个就是前面被调用了n次的方法,这个应该是原作者笔误;2、最后一个方法的最后一条语句:如果是在类workbenchadvisor中调用的话,应该去掉前面的getWindowConfigure,直接
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
getWorkbenchConfigurer().declareImage(symbolicName, desc, shared)
)
另外,上面有些东西应该是用不到的,可以去掉,不过我没有验证。