Java中剪切板的操作


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(); //獲取剪切板的圖片型內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM