`

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);
    }
}

 

分享到:
评论

相关推荐

    RCP产品打包成exe文件

    该手册以本人的RCP项目介绍,如果将开发的产品,如VB JAVA RCP 等单机版本软件,需要打成成exe可以执行的文件

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

    NetBeans RCP - 使用 Node & ExplorerManager 结合 BeanTreeView 编写一个磁盘文件树 &lt;br&gt;项目构建在 NetBeans IDE 6.0 上。

    RCP,RCP开发

    RCP&OSGI;

    RCP在线升级,RCP在线升级

    RCP在线升级RCP在线升级RCP在线升级RCP在线升级RCP在线升级

    RCP国际化教程

    RCP开发需要多语言打包,这个文档能帮助大家如何打包以及导入RCP国际化资源文件

    Eclipse RCP 自动更新源码

    Eclise RCP 自动更新已经经过测试,上传上的文件中,删除了一些系统jar包,如有需要,请自己手动加入 以上代码参照IBM官方网页完成 http://www.ibm.com/developerworks/cn/opensource/os-ecl-rcpum/

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

    这是一个对于初学者很好的学习的rcp例子,有心想和大家一起共享,请多多支持。

    基于Eclipse RCP Email客户端的实现

    本系统还实现了国际化,目前只支持中英两种语言,当系统启动时会根据启动参数加载相应的语言文件,如果没有指定语言参数,则本系统会自动判断操作系统所使用的语言从而加载与操作系统一致的语言文件,如果本系统不...

    Equinox p2 RCP版本检测,更新

    Equinox p2详细图示讲解, RCP中如何实现版本检测,更新

    RCP项目导出exe 步骤

    RCP导出EXE 老大难问题。 RCp 程序导出步骤,保证能够导出~

    RCP Update Manager 产品版本检测,更新(源码,图文说明)

    RCP Update Manager 的模式用于更新rcp中的版本,同时可以检测新版本,该模式用于Eclipse 小于3.4版本,当eclipse版本高于等于3.4版本时,需要采用 equinox p2的模式。

    eclipse 3.6 rcp 开发

    Eclipse RCP允许开发者使用eclipse结构风格设计弹性的可扩展的应用程序,可重用Eclipse中已存在的方法和编码模式。俗话说,万事开头难。Eclipse RCP入手可能会比较困难、费时。接下来我们将主要讲述如何让RCP工作. ...

    RCP自学文档

    从入门开始,讲解怎样开发RCP桌面应用程序

    eclipse rcp 自学教程

    clipse RCP允许开发者使用eclipse结构风格设计弹性的可扩展的应用程序,可重用Eclipse中已存在的方法和编码模式。俗话说,万事开头难。Eclipse RCP入手可能会比较困难、费时。接下来我们将主要讲述如何让RCP工作 ...

    RCP程序设计自学RCP的教程

    有关rcp的内容 是rcp入门的好帮手,rcp自学的好帮手

    rcp[1].part6

    rcp开发文档,英文版的. chm格式值得推荐!

    rcp命令 远程文件复制

    rcp命令的英文是“remote file copy”,即远程文件复制,可以使在两台Linux主机之间的文件复制操作更简单。通过适当的配置,在两台Linux主机之间复制文件而无需输入密码,就像本地文件复制一样简单。 rcp指令用在远...

    Eclipse RCP开发教程

    Eclipse RCP开发教程,RCP入门教程,教你如何使用SWT Eclipse RCP开发教程,RCP入门教程,教你如何使用SWT Eclipse RCP开发教程,RCP入门教程,教你如何使用SWT Eclipse RCP开发教程,RCP入门教程,教你如何使用SWT

    compositetable RCP 表格组件

    RCP 开源组件nubula的compositetable组件,提供了功能强大且方便易用的表格组件。

    Eclipse Rcp

    Eclipse RCP富客户端平台,基于Eclipse开发的。

Global site tag (gtag.js) - Google Analytics