0 0

java如何监视剪贴板5

java如何监视剪贴板,一个项目急需,找了很多资料都不会处理。
最好能给出具体代码。万分感谢!
2009年6月18日 08:35

4个答案 按时间排序 按投票排序

0 0

朋友,问题要自动关闭啦,结分哦

2009年7月03日 15:02
0 0

朋友,问题要自动关闭啦,结分哦

2009年6月29日 08:11
0 0

/**

*片段

*/  

Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();

else if(source == copyItem){//复制 把所选内容送到剪贴板
   String text = textArea.getSelectedText();
   StringSelection  selection = new StringSelection(text);//复制step1:生成Transferable 接口对象。剪贴板只能放该类型的对象。 StringSelection类实现了Transferable接口。
   clipBoard.setContents(selection , null);//复制step2.第二个参数是Owner。
  }
  else if(source == cutItem){//剪切 在复制的基础上多了一个替换。
   String text = textArea.getSelectedText();
   StringSelection  selection = new StringSelection(text);
   clipBoard.setContents(selection , null);
   textArea.replaceRange("",textArea.getSelectionStart(),textArea.getSelectionEnd()); //替换为空串  
  }
  else if(source == pasteItem){//粘贴 把剪贴板内容送到文本域
   Transferable contents =clipBoard.getContents(this);//粘贴step1。
   if(contents==null) return;
   String text = "";
      try{
       text = (String)contents.getTransferData(DataFlavor.stringFlavor);//粘贴step2.
      }catch(Exception exception){
       System.out.println(exception.getStackTrace());
      }
      textArea.replaceRange(text,textArea.getSelectionStart(),textArea.getSelectionEnd());   //粘贴step3 
  }  


簡單的將String寫入到操作系統的剪貼板中,可以參考:
import   java.awt.Toolkit;
import   java.awt.datatransfer.Clipboard;
import   java.awt.datatransfer.StringSelection;
import   java.awt.datatransfer.Transferable;
public   class   WriteString
{
public   static   void   main(String[]   args)
{
Clipboard   sysc   =   Toolkit.getDefaultToolkit().getSystemClipboard();
setClipboardString(sysc, "寫入剪貼板的String ");
}

protected   static   void   setClipboardString(Clipboard   clip,   String   writeMe)   {  
Transferable   tText   =   new   StringSelection(writeMe);  
clip.setContents(tText,   null);  
}  

}
  由於拷貝String,jdk中已經有類StringSelection支持,如果要拷貝一個文件,或者目錄,則要參考此類,對其進行修改,類名:FileSelection.java   (改的可能不是很成功,但能夠用)
      內容為:
/*   @(#)FileSelection.java   07/05/14
  *   @author     me
  *     Copy   file   from   FoxEDM,Paste   to   System(e.g:2000   or   xp   etc)    
  */
package   com.foxera.foxlink.ui;

import   java.awt.datatransfer.Clipboard;
import   java.awt.datatransfer.ClipboardOwner;
import   java.awt.datatransfer.DataFlavor;
import   java.awt.datatransfer.Transferable;
import   java.awt.datatransfer.UnsupportedFlavorException;
import   java.io.*;
import   java.util.List;
import   java.util.ArrayList;
/**
  *   A   <code> Transferable </code>   which   implements   the   capability   required
  *   to   transfer   a   <code> String </code> .
  *
  *   This   <code> Transferable </code>   properly   supports
  *   <code> DataFlavor.javaFileListFlavor </code>
  *   and   all   equivalent   flavors.   Support   for
  *   <code> DataFlavor.plainTextFlavor </code>
  *   and   all   equivalent   flavors   is   <b> deprecated </b> .   No   other
  *   <code> DataFlavor </code> s   are   supported.
  *
  *   @see   java.awt.datatransfer.DataFlavor#javaFileListFlavor
  *   @see   java.awt.datatransfer.DataFlavor#plainTextFlavor
  */
public   class   FileSelection   implements   Transferable,   ClipboardOwner   {

        private   static   final   int   FILE=   0;
        private   static   final   int   PLAIN_FILE   =   1;

        private   static   final   DataFlavor[]   flavors   =   {
                DataFlavor.javaFileListFlavor,
DataFlavor.javaFileListFlavor  
        };

        private   List   data;
     
        /**
          *   Creates   a   <code> Transferable </code>   capable   of   transferring
          *   the   specified   <code> String </code> .
          */
        public   FileSelection(List   data)   {
                this.data   =   data;
        }

        /**
          *   Returns   an   array   of   flavors   in   which   this   <code> Transferable </code>
          *   can   provide   the   data.   <code> DataFlavor.javaFileListFlavor </code>
          *   is   properly   supported.
          *   Support   for   <code> DataFlavor.plainTextFlavor </code>   is
          *   <b> deprecated </b> .
          *
          *   @return   an   array   of   length   two,   whose   elements   are   <code> DataFlavor.
          *                   stringFlavor </code>   and   <code> DataFlavor.plainTextFlavor </code>
          */
        public   DataFlavor[]   getTransferDataFlavors()   {
                //   returning   flavors   itself   would   allow   client   code   to   modify
                //   our   internal   behavior
return   (DataFlavor[])flavors.clone();
        }

        /**
          *   Returns   whether   the   requested   flavor   is   supported   by   this
          *   <code> Transferable </code> .
          *
          *   @param   flavor   the   requested   flavor   for   the   data
          *   @return   true   if   <code> flavor </code>   is   equal   to
          *       <code> DataFlavor.javaFileListFlavor </code>   or
          *       <code> DataFlavor.plainTextFlavor </code> ;   false   if   <code> flavor </code>
          *       is   not   one   of   the   above   flavors
          *   @throws   NullPointerException   if   flavor   is   <code> null </code>
          */
        public   boolean   isDataFlavorSupported(DataFlavor   flavor)   {
//   JCK   Test   StringSelection0003:   if   'flavor '   is   null,   throw   NPE
                for   (int   i   =   0;   i   <   flavors.length;   i++)   {
        if   (flavor.equals(flavors[i]))   {
                return   true;
        }
}
return   false;
        }

        /**
          *   Returns   the   <code> Transferable </code> 's   data   in   the   requested
          *   <code> DataFlavor </code>   if   possible.   If   the   desired   flavor   is
          *   <code> DataFlavor.javaFileListFlavor </code> ,   or   an   equivalent   flavor,
          *   the   <code> String </code>   representing   the   selection   is
          *   returned.   If   the   desired   flavor   is
          *   <code> DataFlavor.plainTextFlavor </code> ,
          *   or   an   equivalent   flavor,   a   <code> Reader </code>   is   returned.
          *   <b> Note: </b>   The   behavior   of   this   method   for
          *   </code> DataFlavor.plainTextFlavor </code>
          *   and   equivalent   <code> DataFlavor </code> s   is   inconsistent   with   the
          *   definition   of   <code> DataFlavor.plainTextFlavor </code> .
          *
          *   @param   flavor   the   requested   flavor   for   the   data
          *   @return   the   data   in   the   requested   flavor,   as   outlined   above
          *   @throws   UnsupportedFlavorException   if   the   requested   data   flavor   is
          *                   not   equivalent   to   either   <code> DataFlavor.stringFlavor </code>
          *                   or   <code> DataFlavor.plainTextFlavor </code>
          *   @throws   IOException   if   an   IOException   occurs   while   retrieving   the   data.
          *                   By   default,   StringSelection   never   throws   this   exception,   but   a
          *                   subclass   may.
          *   @throws   NullPointerException   if   flavor   is   <code> null </code>
          *   @see   java.util.ArrayList <E>
          */
        public   Object   getTransferData(DataFlavor   flavor)
                throws   UnsupportedFlavorException,   IOException
        {
if   (flavor.equals(flavors[FILE]))   {
        return   (Object)data;
}   else   if   (flavor.equals(flavors[PLAIN_FILE]))   {
        return   new   ArrayList <File> (data   ==   null   ?   null   :   data);
}   else   {
        throw   new   UnsupportedFlavorException(flavor);
}
        }

        public   void   lostOwnership(Clipboard   clipboard,   Transferable   contents)   {
        }

}

測試代碼為:
import   java.awt.Toolkit;
import   java.awt.datatransfer.Clipboard;
import   java.awt.datatransfer.Transferable;
import   java.util.List;
import   java.io.File;
import   java.util.ArrayList;
public   class   WriteFile
{
public   static   void   main(String[]   args)
{
Clipboard   sysc   =   Toolkit.getDefaultToolkit().getSystemClipboard();

File   file     =   new   File( "c:\\1.txt ");//目錄也可以
List <File>   listFile   =   new   ArrayList <File> ();
listFile.add(file);
setClipboardFile(sysc,listFile);
}

protected   static   void   setClipboardFile(Clipboard   clip,   List   writeMe)   {  
Transferable   tFile   =   new   FileSelection(writeMe);  
clip.setContents(tFile,   null);  
}  

}

從操作系統的剪貼板中讀取資料,可以參考:
protected   static   String   getClipboardContent(Clipboard   clip)   throws   Exception{
    //get   content   from   clipboard
    Transferable   clipT   =   clip.getContents(null);
    if   (clipT   !=   null)   {
      //   check   content 's   type    
      if   (clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
      {
      return   (String)clipT.getTransferData(DataFlavor.stringFlavor);      
      }
      else   if(clipT.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
      {
      Object   ob   =   clipT.getTransferData(DataFlavor.javaFileListFlavor);
      List   fileList   =   (List)ob;
      if((fileList   !=   null)&&(fileList.size()   >   0))
      {
      for(int   k=0;k <fileList.size();k++)
      {
  System.out.println(((File)fileList.get(k)).getAbsolutePath());
  //根據路徑拷貝文件
      }
      }
      }
    }
    return   null;
}

2009年6月18日 09:58
0 0

Java提供两种类型的剪贴板:系统的和本地的.
      本地剪贴板只在当前虚拟机中有效.Java允许多个本地剪贴板同时存在,可以方便地通过剪贴板的名称来进行存取访问.系统剪贴板与同等操作系统直接关连,允许应用程序与运行在该操作系统下的其它程序之间进行信息交换.

    在进一步深入之前,先看看与剪贴板相同的java类,这些类主要包含在java.awt.datatransfer包中,主要有以下几种:
Clipboard类: 处理任何可以被传递的对象.
ClipboardOwner接口: 任何处理剪贴板的类都必须实现该接口.该接口用于剪贴板中的原始数据被替换时发出通知.
Dataflavor类: 表现被传递的对象支持的所有数据类型.
StringSelection类: java支持的一种可被传递的类.
Transferable接口: 包装传递到剪贴板的对象.
UnsupportedFlavor Exception类: 由可传递对象抛出的异常,表示不对象的数据类型(data flavor)

Clipboard类
Clipboard是存取剪贴板的链接.它包含三个方法:
String getName()
void setContents(Transferable, ClipboardOwner)
Transferable getContent(Object)
访问系统剪贴板,可以瘵系统剪贴板的引用赋值给一个Clipboard对象,如:
Clipboard clipboard = getToolKit().getSystemClipboard();
创建一个本地剪贴板,可以通过传递剪贴板的名称到构造方法中:
Clipboard clipboard = new Clipboard("My first clipboard");

ClipboardOwner接口
ClipboardOwner唯一的功能就是当(剪贴板)拥有者的数据被其它类覆盖时通知它.同时它可以用用通知应用程序释放关联到数据的资源的信号.
在具体应用中,lostOwnership方法可以用于设置标志,该标志用于通知应用有关剪贴板中数据的可见性

java.awt.datatransfer.Clipboard clipboard=java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); //获得系统剪切板

//下面是我的记事本部分功能.e.getSource()是当触发了某个事件.这里是copy的代码,下面依此是粘贴,等代码.可以看你需要的部分.(关于clopboard的).都是汉语拼音命名的变良.

else if(e.getSource()==fuZhi||e.getSource()==fuZhi2)//////////Copy 'fuZhi' is 'Copy'
{
String temp=text.getSelectedText();
stringSelection=new StringSelection(temp);
clipboard.setContents(stringSelection,null);
}

else if(e.getSource()==jianQie||e.getSource()==jianQie2)//////////'jianQie' is 'Cut'
{
String temp=text.getSelectedText();
stringSelection=new StringSelection(temp);
clipboard.setContents(stringSelection,null);
int start=text.getSelectionStart();
int end=text.getSelectionEnd();
text.replaceRange("",start,end);
}
//这里是粘贴.主要是如何从系统剪切板里取得数据.
else if(e.getSource()==zhanTie||e.getSource()==zhanTie2)///////////////'zhanTie' is 'Paste'.
{
java.awt.datatransfer.Transferable transferable=clipboard.getContents(this);
java.awt.datatransfer.DataFlavor flavor=java.awt.datatransfer.DataFlavor.stringFlavor;
if(transferable.isDataFlavorSupported(flavor))
{
try
{
int start=text.getSelectionStart();
int end=text.getSelectionEnd();
text.replaceRange("",start,end);
String str;
int n=text.getCaretPosition();
str=(String)transferable.getTransferData(flavor);
text.insert(str,n);
}
catch(Exception ee)
{

}
      }
}
java.awt.datatransfer.Transferable transferable=clipboard.getContents(this);//传送操作提供数据的类定义接口.放在剪切板的东西都实现了这个接口.

java.awt.datatransfer.DataFlavor flavor=java.awt.datatransfer.DataFlavor.stringFlavor//在数据拖放期间,或在文件系统中,当每个实例显示在剪切板上时,它代表了数据格式的不透明概念.其实就是在系统内存中的东西是哪种类型.比如:文本,图片等.就象网页中的contentType="text/html"等一样.这里的stringFlavor是字符类型.


通过操作系统的剪切板,可以实现在不同的程序中拷贝和粘贴数据。一些用Java写的程序例如很多开发环境也可以访问到剪切板,本文就是研究如何在Java程序中读写系统剪切板的数据。
通过操作系统的剪切板,可以实现在不同的程序中拷贝和粘贴数据。一些用Java写的程序例如很多开发环境也可以访问到剪切板,本文就是研究如何在Java程序中读写系统剪切板的数据。

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

Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();

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

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

protected static String getClipboardText(Clipboard clip) throws Exception{
   // 获取剪切板中的内容
   Transferable clipT = clip.getContents(null);
   if (clipT != null) {
    // 检查内容是否是文本类型
    if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
     return (String)clipT.getTransferData(DataFlavor.stringFlavor); 
   }
   return null;
} 


2. 往剪切板写文本数据

protected static void setClipboardText(Clipboard clip, String writeMe) {
   Transferable tText = new StringSelection(writeMe);
   clip.setContents(tText, null);
} 


3. 从剪切板读取图像

public static Image getImageFromClipboard() throws Exception{
   Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
   Transferable cc = sysc.getContents(null);
   if (cc == null)
    return null;
   else if(cc.isDataFlavorSupported(DataFlavor.imageFlavor))
    return (Image)cc.getTransferData(DataFlavor.imageFlavor);
   return null;
} 


4. 写图像到剪切板

protected static void setClipboardImage2(final Image image) {
   Transferable trans = new Transferable(){
    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(isDataFlavorSupported(flavor))
      return image;
     throw new UnsupportedFlavorException(flavor);
    }

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


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

/*
* Created on 2004-12-23
* 查看图形的窗口
*/
package javayou.clipboard;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
* @author Winter Lau 用于显示图形的窗口
*/
public class ImageViewer extends Frame {

private Image image;

/**
   * 显示一个图像
   * @param viewMe
   */
public ImageViewer(Image viewMe) {
   image = viewMe;
   MediaTracker mediaTracker = new MediaTracker(this);
   mediaTracker.addImage(image, 0);
   try {
    mediaTracker.waitForID(0);
   } catch (InterruptedException ie) {
    ie.printStackTrace();
    System.exit(1);
   }
   addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
     System.exit(0);
    }
   });
   //窗口适应图像大小
   setSize(image.getWidth(null), image.getHeight(null));
   //窗口标题
   setTitle("Viewing Image from Clipboard"); 
   setVisible(true);
}

public void paint(Graphics graphics) {
   graphics.drawImage(image, 0, 0, null);
}

/**
   * 用于读取图像文件并生成Image对象
   */
public static Image getImageFromFile(String fileName) {
   Toolkit toolkit = Toolkit.getDefaultToolkit();
   Image image = toolkit.getImage(fileName);
   return image;
}

}

很简单的啊,尝试过,没有问题!

2009年6月18日 08:39

相关推荐

    clipShare-Desktop:一个Java桌面应用程序,可在连接的设备上共享剪贴板内容

    Java剪贴板API使得可以监视设备上的剪贴板,因此,一旦应用程序运行,它就会侦听复制的剪辑。 复制文本后,它将获取文本并向正在运行的服务器发出PUT请求。 Java剪贴板API的文档可以在以下位置找到 HTTP服务器是...

    EditPlus_3.2.1 编辑器 绿色汉化版

    EditPlus一套功能强大,可取代记事本的文字编辑器,适合所有代码编辑,如HTML、...而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤!

    Editplus绿色破解版

    而它还有一个好用的功能,就是它有监视剪贴板的功能,同步于剪贴板可自动粘贴进 EditPlus 的窗口中省去粘贴的步骤。另外它也是一个非常好用的HTML编辑器,它除了支持颜色标记、HTML 标记,同时支持C、C++、Perl、...

    EditPlus编辑工具

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记,同时支持 C、C++、...

    EditPlus汉化版

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。另外它也是一个非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记,同时...

    EditPlus3(破解版)

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。另外它也是一个非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记,同时...

    EditPlus中文破解版

    还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进EditPlus的编辑窗口中,让你省去粘贴的麻烦。 在代码编辑方面,EditPlus支持颜色标记、HTML标记等功能,同时支持C、C++、Perl、...

    EditPlus(文本编辑器) 中文版

    还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进EditPlus的编辑窗口中,让你省去粘贴的麻烦。 在代码编辑方面,EditPlus支持颜色标记、HTML标记等功能,同时支持C、C++、Perl、...

    Java2实用教程.rar

    7 16使用剪贴板 7 17打印 7 18综合实例 习题 第8章建立对话框 8 1Dialog类 8 2文件对话框 8 3消息对话框 8 4确认对话框 8 5颜色对话框 习题 第9章Java多线程机制 9 1Java中的线程 9 2Thread类的子类创建线程 9 3使用...

    EditPlus X64(文字编辑器)3.70.1186 汉化绿色版

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。另外它也是一个非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记,同时...

    editplus编辑器及破解码

    而它还有一个好用的功能,就是它有监视剪贴板的功能,同步于剪贴板可自动粘贴进 EditPlus 的窗口中省去粘贴的步骤。另外它也是一个非常好用的HTML编辑器,它除了支持颜色标记、HTML 标记,同时支持C、C++、Perl、...

    EditPlus 破解版

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。另外它也是一个非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记,同时...

    java实现,简单文件监控

    对本地文件实施的简单监控,如不能移动,不能复制和粘贴,复制和粘贴时监控系统剪贴板的。

    EditPlus 3.7.0 配色以优化汉化含注册机

    还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进EditPlus的编辑窗口中,让你省去粘贴的麻烦。 在代码编辑方面,EditPlus支持颜色标记、HTML标记等功能,同时支持C、C++、Perl、...

    jsp网页制作学习资料

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能 够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘 贴的步骤。另外它也是一个非常好用的 HTML 编辑器,它除了支持颜色标 记、HTML 标记,...

    EditPlus v4.00.607 中文绿色版(内附帮助文档)

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。 另外EditPlus也是一个非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记...

    EditPlus 可取代记事本的文字编辑器

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。另外它也是一个非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记,同时...

    EditPlus 2

    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。另外它也是一个非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记,同时...

    EditPlus编辑器

    而它还有一个好用的功能,就是它有监视剪贴板的功能,同步于剪贴板可自动粘贴进 EditPlus 的窗口中省去粘贴的步骤。另外它也是一个非常好用的HTML编辑器,它除了支持颜色标记、HTML 标记,同时支持C、C++、Perl、...

Global site tag (gtag.js) - Google Analytics