zoukankan      html  css  js  c++  java
  • 在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();
          }
         }
  • 相关阅读:
    MongoDB学习(翻译6)
    MongoDB学习(翻译5)
    MongoDB学习(翻译4)
    MongoDB学习之--安全和认证
    MongoDB学习(翻译3)
    前端面试题—1
    静态网页制作
    风雨哈佛路感后感
    实习记录11
    实习记录10
  • 原文地址:https://www.cnblogs.com/personnel/p/4582852.html
Copyright © 2011-2022 走看看