`

rcp 本机磁盘文件浏览

阅读更多
package com.xxx.dev;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

public class FileViewer extends ViewPart {

    private TreeViewer tv;
    public static final String ID = "com.xxx.dev.FileViewer"; //$NON-NLS-1$

    /**
     * Create contents of the view part
     * 
     * @param parent
     */
    @Override
    public void createPartControl(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);
        container.setLayout(new FillLayout());

        tv = new TreeViewer(container, SWT.BORDER);
        tv.setContentProvider(new FileTreeContentProvider());
        // 添加标签管理器
        tv.setLabelProvider(new FileTreeLabelProvider());
        // 设置treeviewer的输入
        tv.setInput("root");
        //
        createActions();
        initializeToolBar();
        initializeMenu();
    }

    /**
     * Create the actions
     */
    private void createActions() {
        // Create the actions
    }

    /**
     * Initialize the toolbar
     */
    private void initializeToolBar() {
        IToolBarManager toolbarManager = getViewSite().getActionBars()
                .getToolBarManager();
    }

    /**
     * Initialize the menu
     */
    private void initializeMenu() {
        IMenuManager menuManager = getViewSite().getActionBars()
                .getMenuManager();
    }

    @Override
    public void setFocus() {
        // Set the focus
    }
}

class FileTreeContentProvider implements ITreeContentProvider {
    public Object[] getChildren(Object arg0) {
        // 返回树的下一级节点
        return ((File) arg0).listFiles();
    }

    public Object getParent(Object arg0) {
        // 返回树的上一级节点
        return ((File) arg0).getParentFile();
    }

    public boolean hasChildren(Object arg0) {
        Object[] bj = getChildren(arg0);
        // 判断树是否有下一级节点,true为在节点显示"+"信息
        return bj == null ? false : bj.length > 0;
    }

    public Object[] getElements(Object arg0) {
        // 打印出树的输入信息,通常用户可以通过输入信息构建树
        System.out.println(arg0);
        // File.listRoots()作为树的根节点
        return File.listRoots();
    }

    @Override
    public void dispose() {
    }

    @Override
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
}

class FileTreeLabelProvider implements ILabelProvider {
    private List listeners;

    private String file;

    private String dir;

    boolean preserveCase;

    public FileTreeLabelProvider() {
        listeners = new ArrayList();

        // 添加文件和目录的图标
        file = ISharedImages.IMG_OBJ_ELEMENT;
        dir = ISharedImages.IMG_OBJ_FOLDER;

    }

    public void setPreserveCase(boolean preserveCase) {
        this.preserveCase = preserveCase;

        // 触发事件,重新得到显示标签
        LabelProviderChangedEvent event = new LabelProviderChangedEvent(this);
        for (int i = 0, n = listeners.size(); i < n; i++) {
            ILabelProviderListener ilpl = (ILabelProviderListener) listeners
                    .get(i);
            ilpl.labelProviderChanged(event);
        }
    }

    public Image getImage(Object arg0) {
        // 返回目录或文件的图标
        return ((File) arg0).isDirectory() ? PlatformUI.getWorkbench().getSharedImages().getImage(dir): PlatformUI.getWorkbench().getSharedImages().getImage(file);
    }

    public String getText(Object arg0) {
        String text = ((File) arg0).getName();

        if (text.length() == 0) {
            text = ((File) arg0).getPath();
        }

        // 返回目录或文件的文件名
        return preserveCase ? text : text.toUpperCase();
    }

    public void addListener(ILabelProviderListener arg0) {
        // 添加监听器
        listeners.add(arg0);
    }

    public void dispose() {
    }

    public boolean isLabelProperty(Object arg0, String arg1) {
        return false;
    }

    public void removeListener(ILabelProviderListener arg0) {
        // 删除监听器
        listeners.remove(arg0);
    }
}

 

分享到:
评论

相关推荐

    NetBeans RCP - 使用 Node & ExplorerManager 结合 BeanTreeView 编写的一个磁盘文件树 Build20080119

    在这个特定的项目中,"NetBeans RCP - 使用 Node & ExplorerManager 结合 BeanTreeView 编写的一个磁盘文件树 Build20080119",开发者构建了一个能够展示计算机硬盘上文件和目录结构的可视化工具。 **Node**: 在...

    RCP产品打包成exe文件

    本篇文章将详细介绍如何将RCP产品打包成exe文件,以及在这个过程中可能遇到的关键知识点。 首先,我们需要了解RCP应用的基本结构。RCP应用是由多个插件组成的,每个插件包含了特定的功能模块。这些插件依赖于...

    RCP,RCP开发

    5. **打包与部署**:将RCP应用打包成可执行文件,供用户安装和使用。 总的来说,RCP和OSGI的结合提供了一种高效、灵活且易于维护的桌面应用开发方式,开发者可以充分利用它们的优势来构建复杂、功能丰富的应用程序...

    Equinox p2 RCP版本检测,更新

    RCP(Rich Client Platform)则是Eclipse提供的一种构建桌面应用程序的框架。在RCP应用中,Equinox p2提供了版本检测和自动更新的功能,使得开发者能够轻松地管理软件的生命周期,确保用户始终能够使用最新版本。 ...

    和你分享通过.rcp点云数据进行建筑图纸绘制的方法

    首先,我们需要理解什么是.RCP文件。.RCP是“Reality Computing Point Cloud”(现实计算点云)的缩写,这种文件格式通常由激光扫描仪或其他三维捕获设备生成,包含大量三维坐标点,这些点反映了实地环境的精确几何...

    Eclipse RCP 软件打包发布方法

    Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它提供了一整套工具和功能,使得开发者可以构建出具有丰富用户界面的应用。在开发完成后,我们需要将这些应用打包并发布,以便用户...

    RCP-1500中文操作手册.pdf

    索尼公司生产的RCP-1500系列遥控面板(包括RCP-1500、RCP-1501和RCP-1530型号)是用于配置和控制演播室级及广播级摄像机的专业设备。这些设备提供了高级的操作便利性和功能的多样性,使得用户能够高效地进行摄影机的...

    rcp 学习资料下载,一个简单的rcp例子

    **RCP(Rich Client Platform)**是Eclipse框架下的一个重要组成部分,它提供了一种构建桌面应用程序的平台。RCP允许开发者利用Java语言和Eclipse插件体系架构来创建功能丰富的、可扩展的、且具有现代图形用户界面的...

    RCP在线升级,RCP在线升级

    RCP(Rich Client Platform)是Eclipse开源框架的一部分,它为构建桌面应用程序提供了一个灵活的平台。RCP在线升级是指在不卸载原有版本的情况下,通过网络更新来安装RCP应用的新版本,以确保用户始终能够使用最新...

    RCP自学文档

    也可以通过XML描述符文件(比如plugin.xml)定义动作,并在运行时由RCP解析和实例化。 除了上述内容,RCP还涉及视图(Views)、透视图(Perspectives)、服务(Services)、工作流(Workbench Workflows)、本地化...

    eclipse RCP mp3工程

    【标题】"eclipse RCP mp3工程"指的是一个基于Eclipse Rich Client Platform(RCP)构建的专门处理MP3音频文件的应用程序。Eclipse RCP是一个强大的开发框架,允许开发者创建桌面应用,它提供了丰富的用户界面组件和...

    RCP 资料

    **RCP(Rich Client Platform)**是Eclipse框架下的一个重要组成部分,全称为丰富客户端平台。它为开发桌面应用程序提供了一个可扩展的、模块化的、基于组件的架构。Eclipse RCP使得开发者能够利用Java和Eclipse插件...

    RCP 开发实例 源码

    **RCP(Rich Client Platform)开发实例源码详解** RCP,全称为Rich Client Platform,是Eclipse基金会推出的一种客户端应用程序开发框架。它为开发者提供了一个可扩展的平台,用于构建功能丰富的桌面应用,具有...

    rcp for java one

    【标题】:“rcp for java one” 指的是在...通常在这样的会议上,文件可能包含演示文稿、代码示例、讲义或者会议录音,这些都是进一步学习和理解RCP在JavaOne上讨论内容的宝贵资料。建议查看这个文件以获取更多细节。

    ECLIPSE RCP项目源程序

    Eclipse RCP(Rich Client Platform)是Eclipse框架下的一个组件,它允许开发者构建功能丰富的桌面应用程序。这个压缩包中的“ECLIPSE RCP项目源程序”包含了使用Eclipse RCP开发的一个项目的完整源代码,并且有中文...

    RCP的VIEWER和EDITOR

    通过巧妙地组合和定制这两个组件,开发者能够创建出满足各种需求的用户界面,无论是数据浏览、编辑,还是复杂的业务逻辑处理。`com.free.view.treeview`这个文件很可能包含了一个树形VIEWER的实现,这为学习和理解...

    eclipse rcp 自学教程

    2. 选择富客户机应用程序支持:在项目属性中,确保勾选了“富客户机应用程序支持”。 3. 选择模板:在向导中选择一个简单的模板,例如“无透视图的空插件”以方便初学者理解。 4. 设置应用程序标题:在向导的后续...

Global site tag (gtag.js) - Google Analytics