linkfilefigure.java

来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 78 行

JAVA
78
字号
package net.sf.freenote.figure;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;

import net.sf.util.TousleUtil;

import org.eclipse.draw2d.ActionEvent;
import org.eclipse.draw2d.ActionListener;
import org.eclipse.draw2d.Button;
import org.eclipse.draw2d.Label;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Display;

import sun.misc.BASE64Decoder;

/**
 * 将文件显示为可点击的链接
 * @author levin
 * @since 2008-1-20 下午03:58:40
 */
public class LinkFileFigure extends Button implements FileFigure {
	private String[] fileEmbed;
	
	public LinkFileFigure() {
		super();
		this.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent event) {
				if(fileEmbed.length !=2 || fileEmbed[0] == null) return;
				//开一个线程看文件
				Runnable run=new Runnable(){
					@Override
					public void run() {
						try {
							File f = File.createTempFile("freenote", "."+getTail(fileEmbed[0],'.'));
							TousleUtil.copyIntput2Output(new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(fileEmbed[1])), new FileOutputStream(f));
							Program.launch(f.getAbsolutePath());
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				};
				new Thread(run).start();
			}
		});
	}
	public void setFileEmbed(String[] fileEmbed) {
		if(fileEmbed.length !=2 || fileEmbed[0] == null) return;
		this.fileEmbed = fileEmbed;
		this.setContents(new Label(fileEmbed[0],getImage(fileEmbed[0])));
		this.setToolTip(new Label(fileEmbed[0]));
	}
	
	//取某类文件的图标
	public static Image getImage(String fileName){
		String fileType=getTail(fileName,'.');
		Image image = null;
		Program p = Program.findProgram ("."+fileType);
		if (p != null) {
			ImageData data = p.getImageData ();
			if (data != null) {
				image = new Image (Display.getDefault(), data);
			}
		}
		return image;
	}
	//取某个字串的后半截,如文件扩展名等
	public static String getTail(String full,char delim){
		if(full.lastIndexOf(delim) == -1)
			return null;
		return full.substring(full.lastIndexOf(delim)+1);
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?