Java提供兩種類型的剪貼板:系統的和本地的.
(1)本地剪貼板只在當前虛擬機中有效.Java允許多個本地剪貼板同時存在,可以方便地通過剪貼板的名稱來進行存取訪問.
(2)系統剪貼板與同等操作系統直接關連,允許應用程序與運行在該操作系統下的其它程序之間進行信息交換.
在進一步深入之前,先看看與剪貼板相同的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);//創建能傳輸指定 String 的 Transferable
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); //獲取剪切板的內容,不存在則返回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); //創建能傳輸指定 String 的 Transferable
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(); //獲取剪切板的圖片型內容