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. 如何使用apache自带的ab压力测试工具

    ab是apache自带的一个很好用的压力测试工具,当安装完apache的时候,就可以在bin下面找到ab 1 我们可以模拟100个并发用户,对一个页面发送1000个请求 ./ab -n1000 -c1 ...

  2. 自定义Attribute类

    在我们的项目中有时经常会标识一些类的特性,在下面我们将简短的方式来介绍如何构建自定义的Attribute类. using System; using System.Collections.Generi ...

  3. name设置id的方式 解决多个单选域冲突现象 同时有利于从动态网页取值

  4. 关于jQuery.when()用法

    1.该方法在jQuery1.5开始被引入. 2.用法测试 a. var url1 = "/resource/ar/hometab/index_tab_games.json", ur ...

  5. JVM方法调用过程

    JVM方法调用过程 重载和重写 同一个类中,如果出现多个名称相同,并且参数类型相同的方法,将无法通过编译.因此,想要在同一个类中定义名字相同的方法,那么它们的参数类型必须不同.这种方法上的联系就是重载 ...

  6. Let's Encrypt免费泛域名证书申请

    一. 下载acme.sh,以下四条命令任选一条即可 curl https://get.acme.sh | shwget -O - https://get.acme.sh | sh curl https ...

  7. kubernetes 编排详解 挂载

    ##kube挂载本地磁盘apiVersion: v1 kind: Pod metadata: name: redis spec: containers: - name: redis image: re ...

  8. Git——快速重命名文件和查看commit提交版本【四】

    快速重命名文件 $ git mv README.md readme.md 使用git mv命令后直接commit即可,不再需要进行add或rm操作 查看版本历史 所有的参数都可以进行组合使用的,比如我 ...

  9. Python里的单下划线,双下划线,以及前后都带下划线的意义

    Python里的单下划线,双下划线,以及前后都带下划线的意义: 单下划线如:_name 意思是:不能通过from modules import * 导入,如需导入需要:from modules imp ...

  10. 天哪又要搬家啦qvq

    CSDN现在怎么这么好看了qvq 搬家回去的欲望日渐强烈... update:2019/02/25 被csdn的侧栏广告烦死了