首先说明: 这个是不推荐使用的方法,并且现在有了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.ide
和
org.eclipse.ui.views
,所以你的
RCP
程序会变得更大,这就是代价。
(注:以上是原帖,但个人发现有两个错误:1、最后一个方法名称应该为declareWorkbenchImage
,这个就是前面被调用了n次的方法,这个应该是原作者笔误;2、最后一个方法的最后一条语句:如果是在类workbenchadvisor中调用的话,应该去掉前面的getWindowConfigure,直接

getWorkbenchConfigurer().declareImage(symbolicName, desc, shared)
)
另外,上面有些东西应该是用不到的,可以去掉,不过我没有验证。