java 中的剪切启凳板
通过 *** 作系统的剪切板,可以实现在不同的程序中拷贝和粘贴数据。一些用Java写的程序例如很多开发环境也可以访问到剪切板,本文就是研究如何在Java程序中读写悄茄旅系统剪切板的数据。
Java中使用java.awt.datatransfer.Clipboard类来描述剪切板,并把剪切板分为两种类型:本地和系统,本地剪切板使用 Clipborad cp = new Clipboard("clip1")来构造;系统剪切板通过
Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard()
获取,下面我们给出几个常用的方法用于读写剪切板中的文本数据以及图像数据
1. 从指定的剪切板中获取文本内容
protected static String getClipboardText(Clipboard clip) throws Exception{
// 获取剪切板中的内容
Transferable clipT = clip.getContents(null)
if (clipT != null) {
// 检查内容是否是文本类型
if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
return (String)clipT.getTransferData(DataFlavor.stringFlavor)
}
return null
}
2. 往剪切纳老板写文本数据
protected static void setClipboardText(Clipboard clip, String writeMe) {
Transferable tText = new StringSelection(writeMe)
clip.setContents(tText, null)
}
3. 从剪切板读取图像
public static Image getImageFromClipboard() throws Exception{
Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard()
Transferable cc = sysc.getContents(null)
if (cc == null)
return null
else if(cc.isDataFlavorSupported(DataFlavor.imageFlavor))
return (Image)cc.getTransferData(DataFlavor.imageFlavor)
return null
}
4. 写图像到剪切板
protected static void setClipboardImage2(final Image image) {
Transferable trans = new Transferable(){
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.imageFlavor }
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.imageFlavor.equals(flavor)
}
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if(isDataFlavorSupported(flavor))
return image
throw new UnsupportedFlavorException(flavor)
}
}
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null)
}
有了这四个方法,你下面可以自己写一些程序来进行测试,利用它来实现与其他程序结合测试对剪切板数据的 *** 作。这里给出一个用于显示图像的类,只要把Image实例作为参数传入即可。
/*
* Created on 2004-12-23
* 查看图形的窗口
*/
package javayou.clipboard
import java.awt.Frame
import java.awt.Graphics
import java.awt.Image
import java.awt.MediaTracker
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
/**
* @author Winter Lau 用于显示图形的窗口
*/
public class ImageViewer extends Frame {
private Image image
/**
* 显示一个图像
* @param viewMe
*/
public ImageViewer(Image viewMe) {
image = viewMe
MediaTracker mediaTracker = new MediaTracker(this)
mediaTracker.addImage(image, 0)
try {
mediaTracker.waitForID(0)
} catch (InterruptedException ie) {
ie.printStackTrace()
System.exit(1)
}
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0)
}
})
//窗口适应图像大小
setSize(image.getWidth(null), image.getHeight(null))
//窗口标题
setTitle("Viewing Image from Clipboard")
setVisible(true)
}
public void paint(Graphics graphics) {
graphics.drawImage(image, 0, 0, null)
}
/**
* 用于读取图像文件并生成Image对象
*/
public static Image getImageFromFile(String fileName) {
Toolkit toolkit = Toolkit.getDefaultToolkit()
Image image = toolkit.getImage(fileName)
return image
}
}
Java提供两种类型的剪贴板:系统的和本地的.本地剪贴板只在当前虚拟机中有效.Java允许多个本地剪贴板同时存在,可以方便地通过剪贴板的名称来进行存取访问.
系统剪贴板与同等 *** 作系统直接关连,允许应用程序与运行在该 *** 作系统下的其它程序之间进行信息交换.
在进一步深入之前,先看看与剪贴板相同的java类,这些类主要包含在java.awt.datatransfer包中,主要有以下几种:
Clipboard类: 此类实现一种使用剪切/复制/粘贴 *** 作传输数据的机制.
ClipboardOwner接口: 任何处理剪贴板的类都必须实现该接口.该接口用于剪贴板中的原始数据被替换时发出通知.
Dataflavor类: 提供有关数据的元信息,通常用于访问剪切板上的数据。
Transferable接口: 为传输 *** 作提供数据所使用的类的接口
StringSelection类: 实现传输String所需能力的Transferable
Clipboard类:方法
1.String getName()返回剪切板对象的名字
2.setContents(Transferable contents,ClipOwner owner)
讲剪切板的内容设置到指定的Transferable对象,并将指定的剪切板所有者作为新内容的所有者注册
3.Transferable getContents(null)
返回表示剪贴板当前内容的 transferable 对象。无则null
4.DataFlavor[] getAvailableDataFlavors()
返回 DataFlavor 的数组,其中提供了此剪贴板的当前内容。无则null
5.boolean isDataFlavorAvailable(DataFlavor flavor)
返回是否能够以指定的 DataFlavor 形式提供此剪贴板的当前内容。
6.Object getData(DataFlavor flavor)
返回一个对象,表示此剪贴板中指定 DataFlavor 类型的当前内容。
Transferable接口:
属性:
1.stringFlavor:字符串数据
2.imageFlavor:图片数据
方法:
1.Object getTransferData(DataFlavor flavor)
返回一个对象,该对象表示将要被传输的数据。
2.DataFlavorgetTransferDataFlavors()
返回 DataFlavor 对象的数组,指示可用于提供数据的 flavor。
3.boolean isDataFlavorSupported(DataFlavor flavor)
返回此对象是否支持指定的数据 flavor。
例子:1.往剪切板里面写文本数据
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()
Transferable trandata = new StringSelection("4654654")
clipboard.setContents(trandata, null)
2.获取剪切板中的内容(文本数据)
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()
Transferable clipT = clipboard.getContents(null)
//获取文本中的Transferable对象
if(clipT!=null){
if(clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
//判断内容是否为文本类型stringFlavor
return (String)clipT.getTransferData(DataFlavor.stringFlavor)
//返回指定flavor类型的数据
首先要明白 “剪切板” 里面能放什么内容。 剪切板只能放 “文本内容”或者“文件路径”, 如果你选中文字,然后复制,那么放在剪切板就是文神圆瞎字内容;如果游空你选择腔带一个文件,复制,那放在剪切板里面是 文件的路径。你说的 文件复制到剪切板 是不合理的。
Java 通过 java.awt.datatransfer.Clipboard 访问剪切板。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)