用SWT做的简单的文件浏览器

一个用swt做的简单的文件浏览器,

package hello;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.*;
import java.io.*;
import java.util.LinkedList;
import java.util.List;

public class TreeShellExample {
	
	Display d;
	Shell s;
	
	public TreeShellExample() {
		d = new Display();
		s = new Shell(d);
		
		s.setSize(250, 200);
		s.setImage(new Image(d, "c:/cart.png"));
		s.setText("A Tree Shell Example");
		s.setLayout(new FillLayout());
		
		final Tree t = new Tree(s, SWT.SINGLE | SWT.BORDER);
		File[] roots = File.listRoots();
		
		for(int i = 0; i < roots.length; i++) {
			TreeItem root = new TreeItem(t, SWT.NONE, i);
			String name = roots[i].getAbsolutePath();
			if(name.endsWith("\\")) {
				name = name.substring(0, name.length() - 1);
			}
			root.setText(name);
			root.setImage(new Image(d, "c:/image/folder.gif"));
			
			TreeItem child = new TreeItem(root, SWT.NONE, 0);
		}
		
		t.addTreeListener(new TreeListener() {
			public void treeExpanded(TreeEvent e) {
		           TreeItem ti = (TreeItem)e.item;
		           ti.setImage(new Image(d, "c:\\image\\open.gif"));
		           
		           TreeItem item = ti;
		           
		           List<String> list = new LinkedList<String>();
		           
		           while(item != null) {
		        	   list.add(0, item.getText());
		        	   item = item.getParentItem();
		           }
		           
		           String path = privateConvertToString(list);
		           
		           File[] children = new File(path).listFiles();
		           ti.removeAll();
		           
		           if(children != null) {
		        	   for(int i = 0; i < children.length; i++) {
		        		   TreeItem child = new TreeItem(ti, SWT.NONE, i);
		        		   child.setText(children[i].getName());
		        		   if(children[i].isDirectory()) {
		        			   child.setImage(new Image(d, "c:/image/folder.gif"));
		        			   new TreeItem(child, SWT.NONE, 0);
		        		   } else if(children[i].isFile()) {
		        			   child.setImage(new Image(d, "c:/image/file.gif"));
		        		   }
		        	   }
		           }
		           
		    }
		                
		    public void treeCollapsed(TreeEvent e) {
		          TreeItem ti = (TreeItem)e.item;
		          ti.setImage(new Image(d, "c:\\image\\folder.gif"));
		    }
		}); 
		
		s.open( );
        while(!s.isDisposed( )){
            if(!d.readAndDispatch( ))
                d.sleep( );
        }
        d.dispose( );
	}
	
	private String privateConvertToString(List<String> list) {
		StringBuffer buffer = new StringBuffer();
		if(list.size() == 1) {
			return buffer.append(list.get(0) + "/").toString();
		} else {
			for(int i = 0; i < list.size(); i++) {
				
				buffer.append(list.get(i));
				if(i != list.size() - 1) {
					buffer.append("/");
				}
			}
			
			return buffer.toString();
		}
	}
	
	public static void main(String[] args) {
		new TreeShellExample();
	}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值