Eclipse 的资源浏览器很强大,可以很方便的查看工作空间中可供适配的资源,并且提供了对排序、过滤等功能的支持。Eclipse的RCP项目组不赞成我们在富客户端应用程序中使用ResourceNavigator,原因是ResourceNavigator的实现代码位于Eclipse IDE中,如果使用资源浏览器,生成的RCP产品将会增加二十多兆的空间,而且会增加许多我们的产品中并不使用的功能,很浪费磁盘和系统资源。他们赞成我们根据需要,为应用程序量身定做树形浏览器视图,但是,基于方便和对强大功能的追求,以及对Eclipse代码优良性的肯定,插件开发者们仍然希望将资源浏览器直接加入到我们的RCP程序中。为了满足广大Eclipse开发者强烈的要求,本文对在Eclipse RCP中使用ResourceNavigator的方法做较为全面的介绍。
这是很多博客中都写到的。这里再总结一下。
有两种方式的使用:第一 ,直接使用eclipse自带的(不作修改)。
首先,在plugin.xml的dependencies页中加入 org.eclipse.ui.ide 和 org.eclipse.ui.views(这也就是为什么不提倡在RCP中应用,这样就会增加20多M的空间)
其次,在plugin.xml的Extensions页中加入相应的扩展,也可以直接在plugin.xml中加入下面的代码:
1 < extension
2 point = " org.eclipse.ui.views " >
3 < view
4 class = " org.eclipse.ui.views.navigator.ResourceNavigator "
5 icon = " icons/filenav_nav.gif "
6 id = " org.eclipse.ui.views.ResourceNavigator "
7 name = " 导航器 " >
8 </ view >
9 </ extension >
最后,在Perspective类中的createInitialLayout方法中加入下面的代码:
1 IFolderLayout leftFolder = layout.createFolder( " leftFolderLayout " , // $NON-NLS-1$
2 IPageLayout.LEFT, 0.25f , editorArea);
3 leftFolder.addPlaceholder( " org.eclipse.ui.views.ResourceNavigator " + " :* " );
4 leftFolder.addView( " org.eclipse.ui.views.ResourceNavigator " );
解释: 第1、2两行创建一个IFolderLayout实例,表示在编辑器区域左侧创建一个FolderLayout。第3行为ResourceNavigator添加一个占位符,使用的是ResourceNavigator的ID,后面的“:*”表示还可以有更多的内容,即可以同更多的视图共享这个位置。第4行将ResourceNavigator加入这个布局中,从而在应用程序启动,默认透视图打开时,导航器出现在页面的左侧。
第二种 使用方法就是继承ResourceNavigator类以实现自己需要的功能。
一,创建自己的视图类
public class NavigatorView extends ResourceNavigator,
这个类会在后面详细介绍,并在RCP的透视图类的createInitialLayout方法中
创建加入,具体代码如下:
layout.addView(NavigatorView.ID, IPageLayout.LEFT,
0.2f
, IPageLayout.ID_EDITOR_AREA);
但是如果你这样就运行是会出错的,因为你还没有定义view 的Extensions,具体方法在
Plugin.xml文件的extensions里面新建一个ui.view的扩展,并设置名字和id及class(NavigatorView)
二,制订你的需求--NavigatorView class。
如果你看ResourceNavigator类的代码,你会发现ResourceNavigator的所有action创建都是在
MakeAction里面由一个MainActionGroup类的对象完成的。
所以我们就在NavigatorView里面重载makeActions方法,
并写自己的ActionGroup类--NavigatorActionGroup。
public
class
NavigatorView
extends
ResourceNavigator
{
public
static
final
String ID
=
"
com.ibm.crl.bok.ui.ui.NavigatorView
"
;
private
NavigatorActionGroup navigatorActionGroup;
protected
void
makeActions() {
navigatorActionGroup
=
new
NavigatorActionGroup(
this
);
setActionGroup(navigatorActionGroup);
}
}
三,NavigatorActionGroup类
完全copy MainActionGroup类的代码,然后接下来就是你自己按需求更改了,假设你想把右键菜单里面的 属
性一栏去掉, 那么你就在NavigatorActionGroup类里面propertyDialogAction对象相关代码都删掉就可 以了。
这里需要说明一下,MainActionGroup类管理的是Action group,就是说一组action要不你都要要么都不要,
但是假设有人 想在open组里面把openwith action拿掉怎么办呢?这时,你就要在你的NavigatorActionGroup
里面使用自己的openAction类了, 这个类写起来也很简单,就是仿照openaction类做,然后把你不要的action
对象及相应的代码去掉就可以了, 原理和我们重新写MainActionGroup一样。