使用eclipse自带的Navigator

来源:互联网 发布:java 删除临时文件 编辑:程序博客网 时间:2024/05/26 22:55

        Eclipse 的资源浏览器很强大,可以很方便的查看工作空间中可供适配的资源,并且提供了对排序、过滤等功能的支持。Eclipse的RCP项目组不赞成我们在富客户端应用程序中使用ResourceNavigator,原因是ResourceNavigator的实现代码位于Eclipse IDE中,如果使用资源浏览器,生成的RCP产品将会增加二十多兆的空间,而且会增加许多我们的产品中并不使用的功能,很浪费磁盘和系统资源。他们赞成我们根据需要,为应用程序量身定做树形浏览器视图,但是,基于方便和对强大功能的追求,以及对Eclipse代码优良性的肯定,插件开发者们仍然希望将资源浏览器直接加入到我们的RCP程序中。为了满足广大Eclipse开发者强烈的要求,本文对在Eclipse RCP中使用ResourceNavigator的方法做较为全面的介绍。

 

        这是很多博客中都写到的。这里再总结一下。

 

        有两种方式的使用:第一,直接使用eclipse自带的(不作修改)。

 

        首先,在plugin.xml的dependencies页中加入org.eclipse.ui.ideorg.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一样。

        

原创粉丝点击