標籤:
java從1.5版開始已經能與系統的剪下板很好的互動了。
如果可以在程式中直接調用系統的剪下板來儲存“複製”的對象內容,那可以說的比之前的想法好很多。
下面是一個對java.io.File對象進行copy,paste操作的例子,雖然還不完善,但可以在程式中很好的使用。
/** 定義為傳輸操作提供資料所使用的類的介面* 專用於java.io.File類型*/package angel.datatransfer;import java.awt.datatransfer.*;import java.io.*;import angel.*;public class FileTransfer implements Transferable {private File file;public FileTransfer(File file){ this.file=file;}public Object getTransferData(DataFlavor flavor) { if(isDataFlavorSupported(flavor)) { return file; } else { return null; } }public DataFlavor[] getTransferDataFlavors(){ return new DataFlavor[] { new DataFlavor( file.getClass(), DataFlavor.javaJVMLocalObjectMimeType)};}public boolean isDataFlavorSupported(DataFlavor flavor){ return flavor.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType);} }//在點擊“複製”菜單是,調用:Transferable trans = new FileTransfer(this.getSelectedFile()); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);//返回Clipboard剪下板當前的資料public Object getClipboardData(){ try { Transferable tran=Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); if(tran.isDataFlavorSupported(new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType))) { Object obj=tran.getTransferData(new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType)); if(obj instanceof File) { return (File)obj; } else { return null; } } else { return null; } } catch(Exception err) { err.printStackTrace(); return null; }}
另外還發現一個功能,在Java程式中還可以簡單的監視系統剪下板裡的內容變化,不過如果重複復制同一種類型的資料,比如複製了兩次不同內容的文本,只會觸發一次事件:
//開啟系統剪下板的接聽程式,接聽程式的目標Clipboard更改時調用 Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(this);//開啟系統剪下板的接聽程式,接聽程式的目標Clipboard更改時調用 public void flavorsChanged(FlavorEvent e) { try { Transferable tran=Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); System.out.println(tran); } catch(Exception err) { err.printStackTrace(); } }
在Java中調用與系統有關的剪下板Clipboard