/**
* RichTextTest
*/
package com.xiongyingqi.util;
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.*;
import java.util.Map.Entry;
/**
* @author 瑛琪 <a href="http://xiongyingqi.com">xiongyingqi.com</a>
* @version 2013-8-29 下午4:03:40
*/
public class ClipBoardHelper {
public static Map<Object, ClipBoardType> getClipBoardTypeMap() {
Map<Object, ClipBoardType> map = new LinkedHashMap<Object, ClipBoardType>();
Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
DataFlavor[] dataFlavors = t.getTransferDataFlavors();
for (int i = 0; i < dataFlavors.length; i++) {
DataFlavor dataFlavor = dataFlavors[i];
ClipBoardType clipBoardType = parseType(dataFlavor);
try {
Object object = t.getTransferData(dataFlavor);
if (dataFlavor.isMimeTypeEqual("text/html")
&& dataFlavor.isRepresentationClassCharBuffer()) {
System.out.println(dataFlavor);
System.out.println("object.toString() =========== " + object.toString());
}
if (clipBoardType != null) {
map.put(object, clipBoardType);
}
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// if(t.isDataFlavorSupported(DataFlavor.imageFlavor)){
// try {
// BufferedImage image = (BufferedImage)
// t.getTransferData(DataFlavor.imageFlavor);
// System.out.println(image.toString());
// } catch (UnsupportedFlavorException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
return map;
}
private static ClipBoardType parseType(DataFlavor dataFlavor) {
// EntityHelper.print(dataFlavor);
if (dataFlavor == null) {
return null;
}
/**
*
System.out.println("dataFlavor.isFlavorJavaFileListType() ======== "
* + dataFlavor.isFlavorJavaFileListType()); System.out.println(
* "dataFlavor.isFlavorRemoteObjectType() ======== " +
* dataFlavor.isFlavorRemoteObjectType()); System.out.println(
* "dataFlavor.isFlavorSerializedObjectType() ======== " +
* dataFlavor.isFlavorSerializedObjectType());
* System.out.println("dataFlavor.isFlavorTextType() ======== " +
* dataFlavor.isFlavorTextType());
* System.out.println("dataFlavor.isMimeTypeEqual() ======== " +
* dataFlavor.isMimeTypeEqual("text/html")); System.out.println(
* "dataFlavor.isMimeTypeSerializedObject() ======== " +
* dataFlavor.isMimeTypeSerializedObject()); System.out.println(
* "dataFlavor.isRepresentationClassByteBuffer() ======== " +
* dataFlavor.isRepresentationClassByteBuffer()); System.out.println(
* "dataFlavor.isRepresentationClassByteBuffer() ======== " +
* dataFlavor.isRepresentationClassCharBuffer()); System.out.println(
* "dataFlavor.isRepresentationClassInputStream() ======== " +
* dataFlavor.isRepresentationClassInputStream()); System.out.println(
* "dataFlavor.isRepresentationClassReader() ======== " +
* dataFlavor.isRepresentationClassReader()); System.out.println(
* "dataFlavor.isRepresentationClassRemote() ======== " +
* dataFlavor.isRepresentationClassRemote()); System.out.println(
* "dataFlavor.isRepresentationClassSerializable() ======== " +
* dataFlavor.isRepresentationClassSerializable());
*/
ClipBoardType type = null;// 默认转换为字符串类型
if (dataFlavor.equals(DataFlavor.imageFlavor)) {
type = ClipBoardType.IMAGE;
} else if (dataFlavor.isMimeTypeEqual("text/html")
&& dataFlavor.isRepresentationClassCharBuffer()) {
type = ClipBoardType.HTML;
} else if (dataFlavor.isMimeTypeEqual("application/rtf")
&& dataFlavor.isRepresentationClassInputStream()) {
type = ClipBoardType.HTML;
} else if (dataFlavor.equals(DataFlavor.javaFileListFlavor)) {
type = ClipBoardType.FILE;
} else if (dataFlavor.equals(DataFlavor.plainTextFlavor)) {
type = ClipBoardType.STRINGREADER;
} else if (dataFlavor.equals(DataFlavor.stringFlavor)) {
type = ClipBoardType.STRING;
} else if (dataFlavor.isRepresentationClassInputStream()) {
type = ClipBoardType.INPUT_STREAM;
}
return type;
}
/**
* 剪切板内容类型枚举
*
* @author 瑛琪 <a href="http://xiongyingqi.com">xiongyingqi.com</a>
* @version 2013-8-29 下午4:55:59
*/
public enum ClipBoardType {
/**
* 文件类型
*/
FILE,
/**
* 图片类型
*/
IMAGE,
/**
* 字符串类型
*/
STRING,
/**
* 字符流
*/
STRINGREADER,
/**
* IO流
*/
INPUT_STREAM,
/**
* HTML
*/
HTML
}
public static JLabel[] buildClipBoard() {
Map<Object, ClipBoardType> map = getClipBoardTypeMap();
Set<Entry<Object, ClipBoardType>> entries = map.entrySet();
Collection<JLabel> labels = new ArrayList<JLabel>();
int i = 0;
for (Iterator iterator = entries.iterator(); iterator.hasNext(); ) {
Entry<Object, ClipBoardType> entry = (Entry<Object, ClipBoardType>) iterator.next();
Object object = entry.getKey();
ClipBoardType clipBoardType = entry.getValue();
JLabel label = null;
switch (clipBoardType) {
case IMAGE:
final Image image = (Image) object;
label = new JLabel() {
{
this.setSize(image.getWidth(null), image.getHeight(null));
}
/**
* <br>
* 2013-8-29 下午5:18:22
*
* @see javax.swing.JComponent#paint(java.awt.Graphics)
*/
@Override
public void paint(Graphics g) {
g.drawImage(image, 0, 0, image.getWidth(null), image.getHeight(null), null);
}
};
break;
case FILE:
break;
case STRING:
break;
default:
break;
}
if (label != null) {
labels.add(label);
}
i++;
}
return labels.toArray(new JLabel[]{});
}
public static void main(String[] args) {
Map<Object, ClipBoardType> map = getClipBoardTypeMap();
Set<Entry<Object, ClipBoardType>> entries = map.entrySet();
for (Iterator iterator = entries.iterator(); iterator.hasNext(); ) {
Entry<Object, ClipBoardType> entry = (Entry<Object, ClipBoardType>) iterator.next();
// EntityHelper.printDetail(entry.getKey());
// EntityHelper.printDetail(entry.getValue());
}
}
}