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

名品推荐:欧缇蔻 陌升 依斯凯菲尔

在Java中调用与系统有关的剪切板Clipboard的更多相关文章

  1. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  2. java中调用dll文件的两种方法

    一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNativ ...

  3. JAVA中获取当前系统时间及格式转换

    JAVA中获取当前系统时间   一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; publi ...

  4. Java中调用c/c++语言出现Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/String;)V...错误

    错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/S ...

  5. java中调用js脚本

    JDK1.6加入了对Script(JSR223)的支持.这是一个脚本框架,提供了让脚本语言来访问Java内部的方法.你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本.这个脚本API允许你为脚 ...

  6. autoit 处理文件上传弹出框,并在JAVA中调用

    Java  代码 //定义exe 文件存放的绝对路径 File file2 = new File("."); String command = file2.getCanonical ...

  7. 如何在Java中调用Python代码

    有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...

  8. 在Java中调用Python

    写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...

  9. JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构

    一.简介 JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构 二.依赖 <!-- https://mvnrepository.com/artifact/org.fus ...

随机推荐

  1. linux ps命令用法

    -A    列出所有的进程-w    显示加宽可以显示较多的资讯-au    显示较详细的资讯-aux    显示所有包含其他使用者的行程 -A 显示所有进程(等价于-e)(utility)-a 显示 ...

  2. ReCAPTCHA & 手势验证

    手势验证 recaptcha https://www.vaptcha.com/ https://www.vaptcha.com/document https://www.iviewui.com/com ...

  3. APIDOC的使用

    工具名称:APIDOCGit地址:https://github.com/apidoc/apidoc 项目地址:http://apidocjs.com/ 样例项目:http://apidocjs.com ...

  4. 老男孩python学习自修第九天【yield生成器】

    1.如果在一个方法中有yield关键字则该方法返回的是一个生成器对象 2.对生成器对象进行操作必须进行迭代或循环处理 例如: yield_test.py #!/usr/bin/env python # ...

  5. QTP自动化测试-点滴-步骤

    1 添加 test 2 设置 整个测试项目的 setting -数据表位置 3 添加 引用 方法文件 4 添加 action 5 添加 action 对应的 repository 控件库 6 录制.整 ...

  6. Java之XML操作:从XML中直接获取数据

    本文介绍如何将数据记录在XML文件中,然后通过DOM4J直接从XML中读取到数据. 依赖包: <dependency> <groupId>dom4j</groupId&g ...

  7. Python学习之路——Day02

    今日内容: 1.编程语言介绍(***) 2.python介绍(***) 3.安装cpython解释器(多个版本)(****) 4.运行python程序的两种方式(****) 4.1 交互式 4.2 命 ...

  8. Web API 配置Help Page

    当你创建一个web API,它通常用于创建一个帮助页面,以便其他开发人员知道如何调用你的API.你可以手动创建所有的文档,但最好是autogenerate尽可能多. 简化这个任务,ASP.Web AP ...

  9. 第十九天 标准目录与time 模块

      今日内容 1.目录规范 ***** (1)文件夹的规范写法 bin 可执行文件 conf 配置文件 core 主要业务逻辑 db 数据文件 lib 库 (公共代码 第三方模块) log 日志文件 ...

  10. Docker最全教程

    摘自雪雁大佬的博客,地址:https://www.cnblogs.com/codelove/default.html 目录: Docker最全教程——从理论到实战(一) Docker最全教程——从理论 ...