在Java中调用与系统有关的剪切板Clipboard

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

 

posted @ 2015-06-17 12:02  personnel  阅读(2888)  评论(0编辑  收藏  举报
友情链接:图片批量处理工具 gif动态图制作工具 制作电子相册 图片排版工具 制作淘宝主图视频 MKScript 鼠标键盘自动化脚本语言