Java操作系统剪切板Clipboard及自定义剪切板

转自:

系统剪切板:

系统剪切板一般支持String文本类型和Image图像类型:

String文本类型

插入:

Java代码   收藏代码
  1. Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();//获取系统剪切板  
  2.     String str = "哈哈";//设置字符串  
  3.     StringSelection selection = new StringSelection(str);//构建String数据类型  
  4.     clipboard.setContents(selection, selection);//添加文本到系统剪切板  

  获取:

Java代码   收藏代码
  1. Transferable content = clipboard.getContents(null);//从系统剪切板中获取数据  
  2. if (content.isDataFlavorSupported(DataFlavor.stringFlavor)) {//判断是否为文本类型  
  3.     String text = (String) content.getTransferData(DataFlavor.stringFlavor);//从数据中获取文本值  
  4.     if (text == null) {  
  5.         return;  
  6.     }  
  7.     System.out.println(text);  
  8.   
  9. }  

 图像类型:

public class ImageSelection implements Transferable{
    private static DataFlavor[] flavors={DataFlavor.imageFlavor};
    private Image image;
    public ImageSelection(Image image) {
        // TODO Auto-generated constructor stub
        this.image=image;
    }
    @Override
    public DataFlavor[] getTransferDataFlavors() {
        // TODO Auto-generated method stub
        return (DataFlavor[])flavors.clone();
    }

    @Override
    public boolean isDataFlavorSupported(DataFlavor flavor) {
        // TODO Auto-generated method stub
        if(DataFlavor.imageFlavor.equals(flavor)){
            return true;
        }
        return false;
    }

    @Override
    public Image getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        // TODO Auto-generated method stub
        if(flavor.equals(DataFlavor.imageFlavor)){
            return image;
        }else{
            throw new UnsupportedFlavorException(flavor);
        }
        
    }


自定义剪切板:

首先需要写一个数据类:

Java代码   收藏代码
  1. public class TestSelection implements Transferable, ClipboardOwner {  
  2.     public static final DataFlavor rangeFlavor = new DataFlavor(RangeDataModel.class"Report Range");//class为自定义的java类 字串随便  
  3.    private static final DataFlavor[] flavors = { rangeFlavor };  
  4.     private Object data;  
  5.     public TestSelection(Object data) {  
  6.         this.data = data;  
  7.     }  
  8.       
  9.     @Override  
  10.     public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {  
  11.         if (flavor.equals(flavors[RANGE])) {  
  12.             return data;  
  13.         } else {  
  14.             throw new UnsupportedFlavorException(flavor);  
  15.         }  
  16.     }  
  17.   
  18.     @Override  
  19.     public DataFlavor[] getTransferDataFlavors() {  
  20.         return (DataFlavor[]) flavors.clone();  
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean isDataFlavorSupported(DataFlavor flavor) {  
  25.         for (int i = 0; i < flavors.length; i++) {  
  26.             if (flavor.equals(flavors[i])) {  
  27.                 return true;  
  28.             }  
  29.         }  
  30.         return false;  
  31.     }  
  32.   
  33.     @Override  
  34.     public void lostOwnership(Clipboard clipboard, Transferable contents) {  
  35.         // TODO Auto-generated method stub  
  36.   
  37.     }  
  38.   
  39.   
  40. }  

 然后就是设置值:

Java代码   收藏代码
  1. Clipboard clipboard = new Clipboard("clipboardName");//创建自定义剪切板对象  
  2.   
  3. ReportSelection content = new ReportSelection(data);//构建数据对象 data为数据类型java类的对象  
  4.     clipboard.setContents(content, null);  

 

获取值:

Java代码   收藏代码
  1. Transferable content = clipboard.getContents(null);//注意 自定义剪切板必须给null参数  
  2. if (content.isDataFlavorSupported(ReportSelection.rangeFlavor)) {  
  3.     RangeDataModel data = (RangeDataModel) content.getTransferData(ReportSelection.rangeFlavor);  
  4.     System.out.println(data);  
  5.   

你可能感兴趣的:(Java)