1. 程式人生 > >(集合)Java操作剪貼簿

(集合)Java操作剪貼簿

原文連結:

Java提供兩種型別的剪貼簿:系統的和本地的. 
      本地剪貼簿只在當前虛擬機器中有效.Java允許多個本地剪貼簿同時存在,可以方便地通過剪貼簿的名稱來進行存取訪問.系統剪貼簿與同等作業系統直接關連,允許應用程式與執行在該作業系統下的其它程式之間進行資訊交換. 

    在進一步深入之前,先看看與剪貼簿相同的java類,這些類主要包含在java.awt.datatransfer包中,主要有以下幾種: 
Clipboard類: 處理任何可以被傳遞的物件. 
ClipboardOwner介面: 任何處理剪貼簿的類都必須實現該介面.該介面用於剪貼簿中的原始資料被替換時發出通知. 
Dataflavor類: 表現被傳遞的物件支援的所有資料型別. 


StringSelection類: java支援的一種可被傳遞的類. 
Transferable介面: 包裝傳遞到剪貼簿的物件. 
UnsupportedFlavor Exception類: 由可傳遞物件丟擲的異常,表示不物件的資料型別(data flavor) 

Clipboard類 
Clipboard是存取剪貼簿的連結.它包含三個方法: 
String getName() 
void setContents(Transferable, ClipboardOwner) 
Transferable getContent(Object) 
訪問系統剪貼簿,可以瘵系統剪貼簿的引用賦值給一個Clipboard物件,如: 

Clipboard clipboard = getToolKit().getSystemClipboard(); 
建立一個本地剪貼簿,可以通過傳遞剪貼簿的名稱到構造方法中: 
Clipboard clipboard = new Clipboard("My first clipboard"); 

ClipboardOwner介面 
ClipboardOwner唯一的功能就是當(剪貼簿)擁有者的資料被其它類覆蓋時通知它.同時它可以用用通知應用程式釋放關聯到資料的資源的訊號. 
在具體應用中,lostOwnership方法可以用於設定標誌,該標誌用於通知應用有關剪貼簿中資料的可見性 

java.awt.datatransfer.Clipboard clipboard=java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); //獲得系統剪下板 

//下面是我的記事本部分功能.e.getSource()是當觸發了某個事件.這裡是copy的程式碼,下面依此是貼上,等程式碼.可以看你需要的部分.(關於clopboard的).都是漢語拼音命名的變良. 

else if(e.getSource()==fuZhi||e.getSource()==fuZhi2)//////////Copy 'fuZhi' is 'Copy' 
{ 
String temp=text.getSelectedText(); 
stringSelection=new StringSelection(temp); 
clipboard.setContents(stringSelection,null); 
} 

else if(e.getSource()==jianQie||e.getSource()==jianQie2)//////////'jianQie' is 'Cut' 
{ 
String temp=text.getSelectedText(); 
stringSelection=new StringSelection(temp); 
clipboard.setContents(stringSelection,null); 
int start=text.getSelectionStart(); 
int end=text.getSelectionEnd(); 
text.replaceRange("",start,end); 
} 

//這裡是貼上.主要是如何從系統剪下板裡取得資料. 
else if(e.getSource()==zhanTie||e.getSource()==zhanTie2)///////////////'zhanTie' is 'Paste'. 
{ 
java.awt.datatransfer.Transferable transferable=clipboard.getContents(this); 
java.awt.datatransfer.DataFlavor flavor=java.awt.datatransfer.DataFlavor.stringFlavor; 
if(transferable.isDataFlavorSupported(flavor)) 
{ 
try 
{ 
int start=text.getSelectionStart(); 
int end=text.getSelectionEnd(); 
text.replaceRange("",start,end); 
String str; 
int n=text.getCaretPosition(); 
str=(String)transferable.getTransferData(flavor); 
text.insert(str,n); 
} 
catch(Exception ee) 
{ 

} 
      } 
} 

java.awt.datatransfer.Transferable transferable=clipboard.getContents(this);//傳送操作提供資料的類定義介面.放在剪下板的東西都實現了這個介面. 

java.awt.datatransfer.DataFlavor flavor=java.awt.datatransfer.DataFlavor.stringFlavor//在資料拖放期間,或在檔案系統中,當每 個例項顯示在剪下板上時,它代表了資料格式的不透明概念.其實就是在系統記憶體中的東西是哪種型別.比如:文字,圖片等.就象網頁中的 contentType="text/html"等一樣.這裡的stringFlavor是字元型別. 


通過作業系統的剪下板,可以實現在不同的程式中拷貝和貼上資料。一些用Java寫的程式例如很多開發環境也可以訪問到剪下板,本文就是研究如何在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例項作為引數傳入即可。 
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; 


public class ImageViewer extends Frame { 

private Image image; 


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); 
} 


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型別的資料

===================================================================================================================

原文連結:

  1. import java.awt.*;
  2. import java.awt.datatransfer.*;
  3. import java.io.*;
  4. publicclass Test{
  5. publicstaticvoid main(String [] args){
  6.   String s="abc";
  7.   setClipboard(s);
  8.   System.out.println (getClipboard());
  9.   }
  10. // If a string is on the system clipboard, this method returns it; 
  11. // otherwise it returns null. 
  12. publicstatic String getClipboard() { 
  13.   Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); 
  14. try { 
  15. if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)) { 
  16.   String text = (String)t.getTransferData(DataFlavor.stringFlavor); 
  17. return text; 
  18.   } 
  19.   } catch (UnsupportedFlavorException e) { 
  20.   } catch (IOException e) { 
  21.   } 
  22. returnnull
  23.   } 
  24. // This method writes a string to the system clipboard. 
  25. // otherwise it returns null. 
  26. publicstaticvoid setClipboard(String str) { 
  27.   StringSelection ss = new StringSelection(str); 
  28.   Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); 
  29.   }
  30. //deal with image
  31. //Getting and Setting an Image on the System Clipboard 
  32. // If an image is on the system clipboard, this method returns it; 
  33. // otherwise it returns null. 
  34. publicstatic Image getImageClipboard() { 
  35.   Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); 
  36. try { 
  37. if (t != null && t.isDataFlavorSupported(DataFlavor.imageFlavor)) { 
  38.   Image image = (Image)t.getTransferData(DataFlavor.imageFlavor); 
  39. return image; 
  40.   } 
  41.   } catch (UnsupportedFlavorException e) { 
  42.   } catch (IOException e) { 
  43.   } 
  44. returnnull
  45.   } 
  46. //Setting an image on the system clipboard requires a custom Transferable object to hold the image while on the clipboard. 
  47. // This method writes a image to the system clipboard. 
  48. // otherwise it returns null. 
  49. publicstaticvoid setImageClipboard(Image image) { 
  50.   ImageSelection imgSel = new ImageSelection(image); 
  51.   Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null); 
  52.   } 
  53. // This class is used to hold an image while on the clipboard. 
  54. publicstaticclass ImageSelection implements Transferable { 
  55. private Image image; 
  56. public ImageSelection(Image image) { 
  57. this.image = image; 
  58.   } 
  59. // Returns supported flavors 
  60. public DataFlavor[] getTransferDataFlavors() { 
  61. returnnew DataFlavor[]{DataFlavor.imageFlavor}; 
  62.   } 
  63. // Returns true if flavor is supported 
  64. publicboolean isDataFlavorSupported(DataFlavor flavor) { 
  65. return DataFlavor.imageFlavor.equals(flavor); 
  66.   } 
  67. // Returns image 
  68. public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { 
  69. if (!DataFlavor.imageFlavor.equals(flavor)) { 
  70. thrownew UnsupportedFlavorException(flavor); 
  71.   } 
  72. return image; 
  73.   } 
  74.   } 
  75.  }
  76. 這段程式碼主要描述了以文字和圖片兩種形式讀寫剪貼簿操作。