在Java中调用与系统有关的剪切板Clipboard
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的更多相关文章
- java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了! 社区福利快来领取免费参加MDCC大会机会哦 Tag功能介绍—我们 ...
- java中调用dll文件的两种方法
一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676 JNativ ...
- JAVA中获取当前系统时间及格式转换
JAVA中获取当前系统时间 一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; publi ...
- 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 ...
- java中调用js脚本
JDK1.6加入了对Script(JSR223)的支持.这是一个脚本框架,提供了让脚本语言来访问Java内部的方法.你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本.这个脚本API允许你为脚 ...
- autoit 处理文件上传弹出框,并在JAVA中调用
Java 代码 //定义exe 文件存放的绝对路径 File file2 = new File("."); String command = file2.getCanonical ...
- 如何在Java中调用Python代码
有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...
- 在Java中调用Python
写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...
- JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构
一.简介 JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构 二.依赖 <!-- https://mvnrepository.com/artifact/org.fus ...
随机推荐
- Numpy中array数据操作
1.创建: import numpy as np arr=np.array([1,2,3]) print(arr,arr.ndim) list=[1,2,3] arr=np.array(list) 2 ...
- 关于解决Missing Number之类的算法问题
停止刷题已经三周了,有些想念.最近总算完成了公司代码的重构,于是要继续开始学习算法. 先来看leetcode上面第268题: Given an array containing n distinct ...
- linux中的set -e 与set -o pipefail
1.set -e "Exit immediately if a simple command exits with a non-zero status." 在“set -e”之后出 ...
- k8s HPA自动收缩
HPA自动收缩 autoscale 自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量 #创建一个replicaset测试 [r ...
- 996.ICU
996.ICU https://github.com/996icu/996.ICU https://www.zhihu.com/question/317722302 LICENSE https://g ...
- HTML5 & tel & make a phone call
HTML5 & tel & make a phone call 咋呼叫呀,网页怎么打电话? { key: "exploreCorpPhone", title: &q ...
- Delphi调用MSSQL存储过程返回的多个数据集的方法
varaintf:_Recordset;RecordsAffected:OleVariant; begin ADOStoredProc1.Close;ADOStoredProc1.Open;aintf ...
- PHP关联查询
article文章表: aid title content uid 1 文章1 文章1正文内容... 1 2 文章2 文章2正文内容... 1 3 文章3 文章3正文内容... 2 4 文章4 文章4 ...
- 注解方式过滤器(Filter)不能过滤Servlet的问题
https://www.aliyun.com/jiaocheng/778495.html 今天写filter(过滤器)的时候,碰到一个奇怪的问题,发现filter可以过滤urlPatterns,但是无 ...
- 学习 Spring (十) 注解之 @Bean, @ImportResource, @Value
Spring入门篇 学习笔记 @Bean @Bean 标识一个用于配置和初始化一个由 Spring IoC 容器管理的新对象的方法,类似于 XML 配置文件的 可以在 Spring 的 @Config ...