当前位置:首页
开发技术指南» 文章正文
    引言:

 ·呵呵,可用分正好1024    »显示摘要«
    摘要: 看来这辈子做程序是做定了。 ......
 ·接好最后50分    »显示摘要«
    摘要: 一共500了吧? ......


如何用Java操作剪贴板

目前只能实现纯文本的复制,如何实现类似DreamWeaver的图片的url复制?谢谢。

NO.1   作者: keiy

请参考JAVA   2   图形设计卷:第20章   剪贴板与数据传输  
  其中一部分:  
  20.6.1   ImageSelection——封装图像的Transferable对象  
   
    实现图像复制操作首先需要处理的问题是开发一个类,它实现Transferable对象并封装图像。这个类的第一个版本中,将仅仅实现图像的一种表示格式,即java.awt.image。随后,为了更好地使用,我们将增加另一外一种数据格式。  
    我们遵循StringSelection的命名约定,将我们需要创建的类命名为ImageSelection。另外,与StringSelection相同,为了使用方便,我们将实现ClipboardOwner接口(注:请参阅20.2.2节“ClipboardOwnerod   ”。实现Transferable的类也同时实现ClipboardOwner接口是经常使用的处理方法),这样当设置剪贴板内容时可以将其内容与剪贴板拥有者指定为同一个对象:  
   
    public   class   imageSelection   implements   Transferable,ClipboardOwner{  
     static   public   DataFlavor   imageFlavor;  
     private   DataFlavor[]   flavors={imageFlavor};  
     private   Image   image;  
     ...  
   
    ImageSelection   包含DataFlavor的一个静态公共实例,客户可利用该实例指定图像按照哪种数据格式产生。既然ImageSelection只提供一种图像数据格式,其数据格式数组中将仅仅只包含一个项目。当然,调用getTransferDataFlavor方法可以返回该数组。最后,ImageSelection保持它当前代表的图像的引用。  
    ImageSelection实现一个创建ImageFlavor实例的静态块:    
    static{  
     try{  
      ImageFlavor=new   DataFlavor(  
       Class.forName("java.awt.Image"),"AWT   Image");  
     }  
     catch(ClassNotFoundException   e){  
      e.printStackTrace();  
     }  
    }  
   
    数据格式是利用Java类创建的,而不是利用MIME类创建的。另外,数据格式被命名为具有标识意义的“AWT   Image”。  
    ImageSelection提供唯一个构造器,它使用图像的引用,实现Transferable接口所需要的3个方法:  
   
     public   ImageSelection(Image   image)   {  
      this.image   =   image;  
     }  
     public   synchronized   DataFlavor[]   getTransferDataFlavors()   {  
      return   flavors;  
     }  
     public   boolean   isDataFlavorSupported(DataFlavor   flavor)   {  
      return   flavor.equals(ImageFlavor);  
     }  
     public   synchronized   Object   getTransferData(DataFlavor   flavor)    
      throws   UnsupportedFlavorException,   IOException   {  
      if(flavor.equals(ImageFlavor))   {  
       return   image;  
      }  
      else   {  
       throw   new   UnsupportedFlavorException(flavor);  
      }  
     }  
     public   void   lostOwnership(Clipboard   c,   Transferable   t)   {  
     }  
    如果getTransferData()请求的数据格式与ImageFlavor实例相等,则返回图像。否则,将抛出一个异常UnsupportedFlavorException另外,由于在这种情况下,ImageSelection永远不会释放与其封装图像相关的资源,因此,其lostOwnership方法被实现为空操作方法。  
    至此,已经完成了封装图像的Transferable对象。ImageSelection类的完整代码如程序范例20-2所示。      
   
  程序范例20-2   ImageSelection类  
   
    import   java.awt.*;  
    import   java.awt.datatransfer.*;  
    import   java.io.*;  
   
    public   class   ImageSelection   implements   Transferable,  
     ClipboardOwner   {  
     static   public   DataFlavor   ImageFlavor;  
   
     private   DataFlavor[]   flavors   =   {ImageFlavor};    
     private   Image   image;  
   
     static   {  
      try   {  
       ImageFlavor   =   new   DataFlavor(  
        Class.forName("java.awt.Image"),   "AWT   Image");  
      }  
      catch(ClassNotFoundException   e)   {  
       e.printStackTrace();  
      }  
      catch(java.util.mime.MimeTypeParseException   e)   {  
       e.printStackTrace();  
      }  
     }  
     public   ImageSelection(Image   image)   {  
      this.image   =   image;  
     }  
     public   synchronized   DataFlavor[]   getTransferDataFlavors()   {  
      return   flavors;  
     }  
     public   boolean   isDataFlavorSupported(DataFlavor   flavor)   {  
      return   flavor.equals(ImageFlavor);  
     }  
     public   synchronized   Object   getTransferData(DataFlavor   flavor)    
      throws   UnsupportedFlavorException,   IOException   {  
      if(flavor.equals(ImageFlavor))   {  
       return   image;  
      }  
      else   {  
       throw   new   UnsupportedFlavorException(flavor);  
      }  
     }  
     public   void   lostOwnership(Clipboard   c,   Transferable   t)   {  
     }  
    }  
   
   
   
 


 ·接分    »显示摘要«
    摘要: 100 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE