zoukankan      html  css  js  c++  java
  • 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(); //获取剪切板的图片型内容

  • 相关阅读:
    仿微博添加和删除的动画
    到公司实习一个月记
    写一份好简历
    排序算法之快速排序
    PHP和MYSQL中的日期和时间
    我的php经历
    新的征程
    毕业设计笔记
    排序算法之总结
    javascript执行效率小结
  • 原文地址:https://www.cnblogs.com/java-of-hnj/p/5993240.html
Copyright © 2011-2022 走看看