java对于粘贴板的操作(复制和粘贴),系统粘贴板(包含图片和文本)
Java提供两种类型的剪贴板:系统的和本地的.(1)本地剪贴板只在当前虚拟机中有效.Java允许多个本地剪贴板同时存在,可以方便地通过剪贴板的名称来进行存取访问.(2)系统剪贴板与同等操作系统直接关连,允许应用程序与运行在该操作系统下的其它程序之间进行信息交换.下边为java对于系统粘贴板可以进行的操作,对文本和图片的复制以及粘贴(对图片用的是File,当然也可以手动绘制Image对象只需要...
Java提供两种类型的剪贴板:系统的和本地的.
(1)本地剪贴板只在当前虚拟机中有效.Java允许多个本地剪贴板同时存在,可以方便地通过剪贴板的名称来进行存取访问.
(2)系统剪贴板与同等操作系统直接关连,允许应用程序与运行在该操作系统下的其它程序之间进行信息交换.
下边为java对于系统粘贴板可以进行的操作,对文本和图片的复制以及粘贴(对图片用的是File,当然也可以手动绘制Image对象只需要修改部分方法即可)
package clipboard;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
public class ClipboardTest {
/**
* 将字符串赋值到系统粘贴板
* @param data 要复制的字符串
*/
public void setClipboardString(String data) {
// 获取系统剪贴板
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
// 封装data内容
Transferable ts = new StringSelection(data);
// 把文本内容设置到系统剪贴板
clipboard.setContents(ts, null);
}
/**
* 得到系统粘贴板上的String对象
* @return 内容
*/
public String getClipboardString() {
//获取系统粘贴板
//Toolkit类:Abstract Window Toolkit的所有实际实现的抽象超类。 Toolkit类的子类用于将各种组件绑定到特定的本机Toolkit实现。
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
//获取封装好的data数据
Transferable ts = clipboard.getContents(null);
if (ts != null) {
// 判断剪贴板中的内容是否支持文本
if (ts.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
// 获取剪贴板中的文本内容
String data = (String) ts.getTransferData(DataFlavor.stringFlavor);
return data;
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}
/**
* 复制图像到系统粘贴板 (实际上我们不用手绘Image对象直接用File对象得到)
* @param path 图片的地址
*/
private void copyImage(String path){
//将path得到的file转换成image
Image image = null;
File file = new File(path);
BufferedImage bi;
//通过io流操作把file对象转换成Image
try {
InputStream is=new FileInputStream(file);
bi = ImageIO.read(is);
image=(Image)bi;
} catch (IOException e) {
e.printStackTrace();
}
//复制到粘贴板上
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //得到系统剪贴板
Transferable selection = new ImageSelection(image); //图像通道
clipboard.setContents(selection, null);
}
/**
* 得到系统粘贴板上的图片复制到我们项目路径下;
* @return 目标Image对象
*/
public Image getImage() {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable ts = clipboard.getContents(null);
if(ts==null) return null;
Image image = null;
if(ts.isDataFlavorSupported(DataFlavor.imageFlavor)) {//这是判断是否支持粘贴图片
try {
image = (Image)ts.getTransferData(DataFlavor.imageFlavor);
System.out.println("可以转换");
} catch (UnsupportedFlavorException | IOException e) {
e.printStackTrace();
}
}
//通过我们得到的image转换成BufferedImage对象来写出数据
BufferedImage bi = (BufferedImage) image;
bufferedImageToOutputStream(bi);
return image;
}
/**
* 通过file和BufferedImage 得到一个OutputStream对象来讲数据写入定义好的file对象
* @param bufferedimage 我们从image转换来的
* @param file 图片.png
*/
public void bufferedImageToOutputStream(BufferedImage bufferedimage){
File file = new File("图片.png");
if(file.exists()) file.delete();
try {
FileOutputStream os = new FileOutputStream(file);
ImageIO.write(bufferedimage, "png", os);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ClipboardTest ct = new ClipboardTest();
// ct.setClipboardString("666");
// System.out.println(ct.getClipboardString());
ct.copyImage("C:\\Users\\Administrator\\Desktop\\数据结构\\广义表.png");
ct.getImage(); //我们接收没用,就看file的效果就可以了
// System.out.println(System.getProperty("java.class.path"));
}
}
对于其中涉及到的类的大概作用:
Clipboard类: 此类实现一种使用剪切/复制/粘贴操作传输数据的机制. ClipboardOwner接口: 任何处理剪贴板的类都必须实现该接口.该接口用于剪贴板中的原始数据被替换时发出通知. Dataflavor类:
提供有关数据的元信息,通常用于访问剪切板上的数据。 Transferable接口: 为传输操作提供数据所使用的类的接口
StringSelection类: 实现传输String所需能力的Transferable
以及我们用到的方法功能的大概描述:
.setContents(Transferable contents,ClipOwner owner):将剪切板的内容设置到指定的Transferable对象,并将指定的剪切板所有者作为新内容的所有者注册
Transferable getContents(null):返回表示剪贴板当前内容的 transferable 对象。无则null
boolean isDataFlavorAvailable(DataFlavor flavor):返回是否能够以指定的 DataFlavor 形式提供此剪贴板的当前内容。
Transferable接口:
属性:
stringFlavor:字符串数据
imageFlavor:图片数据
更多推荐
所有评论(0)