Java中的剪切板操作

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包

import java.io.IOException;  
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;  
二、设置系统剪切板内容[内容为文本]
public static void setSystemClipboard(String refContent){   
//设置为static是为了直接使用,不用new一个该类的实例即可直接使用,即定义的: 类名.方法名  
    String vc = refContent.trim();  
    StringSelection ss = new StringSelection(vc);  
      
    Clipboard sysClb=null;  
    sysClb = Toolkit.getDefaultToolkit().getSystemClipboard();  
    sysClb.setContents(ss,null);  
       
    //Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);  //跟上面三行代码效果相同  
}  
三、获取系统剪切板内容[剪切板中内容为文本型]
public static String getSystemClipboard(){//获取系统剪切板的文本内容[如果系统剪切板复制的内容是文本]  
    Clipboard sysClb=null;  
    sysClb = Toolkit.getDefaultToolkit().getSystemClipboard();  
    Transferable t = sysClb.getContents(null);  
    //Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);  //跟上面三行代码一样  
    try {   
        if (null != t && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {   
        String text = (String)t.getTransferData(DataFlavor.stringFlavor);   
        return text;   
        }   
    } catch (UnsupportedFlavorException e) {  
        //System.out.println("Error tip: "+e.getMessage());  
    } catch (IOException e) {   
    }   //System.out.println("Error tip: "+e.getMessage());  
    return null;   
} 
四、设置系统剪切板内容[内容为图片型]

public static void setImageClipboard(Image image) {   
    ImageSelection imgSel = new ImageSelection(image);   
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null);   
}   
  
public static class ImageSelection implements Transferable {   
    private Image image;   
    public ImageSelection(Image image) {this.image = image;}   
        
    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 (!DataFlavor.imageFlavor.equals(flavor)) {throw new UnsupportedFlavorException(flavor);}   
        return image;   
    }  
} 
五、获取系统剪切板内容[剪切板中内容为图片型]
public static Image getImageClipboard() {   
    Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);   
    try {   
        if (null  != t && t.isDataFlavorSupported(DataFlavor.imageFlavor)) {   
        Image image = (Image)t.getTransferData(DataFlavor.imageFlavor);   
        return image;   
        }   
    } catch (UnsupportedFlavorException e) {   
          //System.out.println("Error tip: "+e.getMessage());  
    } catch (IOException e) {   
          //System.out.println("Error tip: "+e.getMessage());  
    }   
    return null;   
} 
六、使用方式
类名.setSystemClipboard("这里是新设置的剪切板的内容");  //给剪切板设置文本型内容   
  
String clbContent = 类名.getSystemClipboard();  //获取剪切板的文本型内容  
  
Image img = new Image("xpic.jpg")  
类名.setImageClipboard(img);  //给剪切板设置图片型内容   
Image img2 = 类名.getImageClipboard(); //获取剪切板的图片型内容  


你可能感兴趣的:(Java中的剪切板操作)