疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java应用如何读写系统剪切板的数据


 

  Java中使用java.awt.datatransfer.Clipboard类来描述剪切板,并把剪切板分为两种类型:本地和系统,本地剪切板使用Clipboradcp=newClipboard("clip1");来构造;系统剪切板通过

  Clipboardsysc=Toolkit.getDefaultToolkit().getSystemClipboard();

  获取,下面我们给出几个常用的方法用于读写剪切板中的文本数据以及图像数据

  1.从指定的剪切板中获取文本内容

  protectedstaticStringgetClipboardText(Clipboardclip)throwsException{

  //获取剪切板中的内容

  TransferableclipT=clip.getContents(null);

  if(clipT!=null){

  //检查内容是否是文本类型

  if(clipT.isDataFlavorSupported(DataFlavor.stringFlavor))

  return(String)clipT.getTransferData(DataFlavor.stringFlavor);

  }

  returnnull;

  }

  2.往剪切板写文本数据

  protectedstaticvoidsetClipboardText(Clipboardclip,StringwriteMe){

  TransferabletText=newStringSelection(writeMe);

  clip.setContents(tText,null);

  }

  3.从剪切板读取图像

  publicstaticImagegetImageFromClipboard()throwsException{

  Clipboardsysc=Toolkit.getDefaultToolkit().getSystemClipboard();

  Transferablecc=sysc.getContents(null);

  if(cc==null)

  returnnull;

  elseif(cc.isDataFlavorSupported(DataFlavor.imageFlavor))

  return(Image)cc.getTransferData(DataFlavor.imageFlavor);

  returnnull;

  }

  4.写图像到剪切板

  protectedstaticvoidsetClipboardImage2(finalImageimage){

  Transferabletrans=newTransferable(){

  publicDataFlavor[]getTransferDataFlavors(){

  returnnewDataFlavor[]{DataFlavor.imageFlavor};

  }

  publicbooleanisDataFlavorSupported(DataFlavorflavor){

  returnDataFlavor.imageFlavor.equals(flavor);

  }

  publicObjectgetTransferData(DataFlavorflavor)throwsUnsupportedFlavorException,IOException{

  if(isDataFlavorSupported(flavor))

  returnimage;

  thrownewUnsupportedFlavorException(flavor);

  }

  };

  Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans,null);

  }

  有了这四个方法,你下面可以自己写一些程序来进行测试,利用它来实现与其他程序结合测试对剪切板数据的操作。这里给出一个用于显示图像的类,只要把Image实例作为参数传入即可。

  /*

  *查看图形的窗口

  */

  packagejavayou.clipboard;

  importjava.awt.Frame;

  importjava.awt.Graphics;

  importjava.awt.Image;

  importjava.awt.MediaTracker;

  importjava.awt.event.WindowAdapter;

  importjava.awt.event.WindowEvent;

  /**

  *@用于显示图形的窗口

  */

  publicclassImageViewerextendsFrame{

  privateImageimage;

  /**

  *显示一个图像

  *@paramviewMe

  */

  publicImageViewer(ImageviewMe){

  image=viewMe;

  MediaTrackermediaTracker=newMediaTracker(this);

  mediaTracker.addImage(image,0);

  try{

  mediaTracker.waitForID(0);

  }catch(InterruptedExceptionie){

  ie.printStackTrace();

  System.exit(1);

  }

  addWindowListener(newWindowAdapter(){

  publicvoidwindowClosing(WindowEvente){

  System.exit(0);

  }

  });

  //窗口适应图像大小

  setSize(image.getWidth(null),image.getHeight(null));

  //窗口标题

  setTitle("ViewingImagefromClipboard");

  setVisible(true);

  }

  publicvoidpaint(Graphicsgraphics){

  graphics.drawImage(image,0,0,null);

  }

  /**

  *用于读取图像文件并生成Image对象

  */

  publicstaticImagegetImageFromFile(StringfileName){

  Toolkittoolkit=Toolkit.getDefaultToolkit();

  Imageimage=toolkit.getImage(fileName);

  returnimage;

  }

  }