Java剪切板操作大全

转载自   Java剪切板操作大全

1. 概述

提起剪切板,一般都是在桌面系统或工具中使用。目前,操作Java剪切板有两种形式,这也对应着两种不同的技术Swing和JavaFX。
而剪切板有可以分为系统剪切板和自定义剪切板。顾名思义,系统剪切板可以在操作系统的范围内通用,一般支持String文本类型和Image图像类型。而自定义剪切板主要用于Java桌面应用程序内部的数据转移。

2. Swing的操作方式

2.1 String文本类型

2.1.1 设置
//获取系统剪切板
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
//设置字符串
String str = "测试设置String到剪切板";
//构建String数据类型
StringSelection selection = new StringSelection(str);
//添加文本到系统剪切板
clipboard.setContents(selection, null);
2.1.2 获取
Transferable content = clipboard.getContents(null);//从系统剪切板中获取数据
if (content.isDataFlavorSupported(DataFlavor.stringFlavor)) {//判断是否为文本类型String text = (String) content.getTransferData(DataFlavor.stringFlavor);//从数据中获取文本值if (text == null) {return;}System.out.println(text);
}

2.2 Image图像类型

2.2.1 设置
public static void setImageClipboard(Image image) {ImageSelection imgSel = new ImageSelection(image);Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null);
}public static class ImageSelection implements Transferable {private Image image;public ImageSelection(Image image) {this.image = image;}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 (!DataFlavor.imageFlavor.equals(flavor)) {throw new UnsupportedFlavorException(flavor);}return image;}
}
2.2.2 获取
public static Image getImageClipboard() {Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);try {if (null  != t && t.isDataFlavorSupported(DataFlavor.imageFlavor)) {Image image = (Image)t.getTransferData(DataFlavor.imageFlavor);return image;}} catch (UnsupportedFlavorException e) {//System.out.println("Error tip: "+e.getMessage());} catch (IOException e) {//System.out.println("Error tip: "+e.getMessage());}return null;
}

2.3 自定义剪切板

2.3.1 首先需要写一个数据类
public class TestSelection implements Transferable, ClipboardOwner {public static final DataFlavor rangeFlavor = new DataFlavor(RangeDataModel.class, "Report Range");//class为自定义的java类 字串随便private static final DataFlavor[] flavors = { rangeFlavor };private Object data;public TestSelection(Object data) {this.data = data;}@Overridepublic Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {if (flavor.equals(flavors[RANGE])) {return data;} else {throw new UnsupportedFlavorException(flavor);}}@Overridepublic DataFlavor[] getTransferDataFlavors() {return (DataFlavor[]) flavors.clone();}@Overridepublic boolean isDataFlavorSupported(DataFlavor flavor) {for (int i = 0; i < flavors.length; i++) {if (flavor.equals(flavors[i])) {return true;}}return false;}@Overridepublic void lostOwnership(Clipboard clipboard, Transferable contents) {// TODO Auto-generated method stub}
}
2.3.2 设置
//创建自定义剪切板对象
Clipboard clipboard = new Clipboard("clipboardName");
//构建数据对象 data为数据类型java类的对象
ReportSelection content = new ReportSelection(data);
clipboard.setContents(content, null);
2.3.3 获取
//注意:自定义剪切板必须给null参数
Transferable content = clipboard.getContents(null);
if (content.isDataFlavorSupported(ReportSelection.rangeFlavor)) {RangeDataModel data = (RangeDataModel) content.getTransferData(ReportSelection.rangeFlavor);System.out.println(data);
}

3. JavaFX的操作方式

3.1 设置
Clipboard clipboard = Clipboard.getSystemClipboard();
ClipboardContent cc = new ClipboardContent();
cc.putString("测试使用JavaFX向系统剪切板放置数据");
clipboard.setContent(cc);
3.2 获取
Clipboard clipboard = Clipboard.getSystemClipboard();
clipboard.getContent(DataFormat.PLAIN_TEXT);
至于JavaFX对其他类型的数据的剪切支持,DataFormat中定义了以下类型PLAIN_TEXT、HTML、RTF、URL、IMAGE、FILES,大家可以去尝试

4. 注意

4.1 Swing操作方式的Clipboard类位于 java.awt.datatransfer包中,而JavaFX操作方式的Clipboard类位于javafx.scene.input包中。

4.2 如果你在你的Java桌面应用程序中同时使用了Swing和JavaFX技术,建议只使用一种剪切方法,且要保证在对应的事件线程上同步,否则可能会遇到剪切板锁定无法访问的问题。

5. 参考

本文参考了以下文章的内容

5.1 http://blog.csdn.net/shenzhennba/article/details/8213294

5.2 http://cuiweiqing1988.iteye.com/blog/947030


http://www.alanzeng.cn/2015/10/java-clipboard/


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

君威u0073故障码解决_顽疾修复过程,君威没倒挡的变速箱故障就是这样修好

君威没倒挡的变速箱故障表现&#xff1a;开了18万公里的君威有没有倒挡的故障发生。每当这时&#xff0c;要重新启动能恢复。但是&#xff0c;出现的没倒挡的次数逐渐增多。没检查出故障码。顽疾修复过程&#xff0c;君威没倒挡的变速箱故障就是这样修好&#xff1a;检查君威变…

idea创建标准的meaven项目

若没有jdk 则这样配置 就是下拉框默认没有jdk1.7 初始化完成了

新闻发布项目——接口类(categoryTBDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.categoryTB;/*** 新闻类别的接口* author Administrator**/ public interface categoryTBDao {//查询所有的类别public List<categoryTB> getCategoryTBAll();//添加新闻类别public int …

controller属于哪一层_别急着换5G,4G手机同样值得考虑!哪几款安卓手机称得上4G机皇?...

今年已经进入了5G手机大战&#xff0c;目前有不少厂商都推出了自家的5G旗舰。虽说5G是以后的主流&#xff0c;但目前入手5G手机还为时尚早&#xff0c;毕竟距离5G全面普及还有至少2年时间&#xff0c;5G的套餐费用也高出许多。当前一些4G旗舰机型价格下降幅度不小&#xff0c;马…

基于.NET SingalR,LayIM2.0实现的web聊天室

LayIM官网 http://www.layui.com/doc/layim.html 博客教程&#xff1a;http://www.cnblogs.com/panzi/p/5767095.html 项目说明&#xff1a;基于.NET SingalR,LayIM2.0实现的web聊天室&#xff0c;功能如下&#xff1a; 注册登录 好友聊天&#xff0c;发送图片、文件 群组聊天&…

java验证身份证号码是否有效源代码

转载自 java验证身份证号码是否有效源代码1、描述 用java语言判断身份证号码是否有效&#xff0c;地区码、出身年月、校验码等验证算法2、源代码package test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import …

idea初始化git 初始化git仓库

git status 查看变化 主干发布 分支开发 git 初始化 和git的分支完成了

互换性与技术测量教材pdf_【检验】临床生物化学检验技术(第6版)人民卫生出版社【电子教材PDF】【人卫教材电子版】...

内容简介为了顺应医学教育综合改革的发展趋势&#xff0c;推动我国医学检验技术专业的发展和学科建设&#xff0c;针对四年制医学检验技术专业人才的培养目标和培养模式&#xff0c;贯彻四年制教育思想&#xff0c;体现适合四年制教学需求的课程体系建设&#xff0c;教育部高等…

MyEclipse生成Javadoc帮助文档

转载自 MyEclipse生成Javadoc帮助文档 Javadoc是Sun公司提供的一个技术&#xff0c;它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说&#xff0c;只要在编写程序时以一套特定的标签作注释&#xff0c;在程序编写完成后&#xff0c;通过…

Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件

对于redis-sentinel我在之前的文章中Redis集群~StackExchange.redis连接Twemproxy代理服务器 已经说过&#xff0c;它是一个仲裁者&#xff0c;当主master挂了后&#xff0c;它将在所有slave服务器中进行选举&#xff0c;选举的原则当然可以看它的官方文章&#xff0c;这与我们…

新闻发布项目——接口类(BaseDao)

package bdqn.newsMange.Dao; /*** 公共类* author Administrator**/ import java.sql.*; import java.util.List; public class BaseDao {Connection connnull;PreparedStatement psnull;ResultSet rsnull;public Connection getConnection() throws ClassNotFoundException, …

docker容器的标准使用过程_phpStorm中使用xdebug工具调试docker容器中的程序

最近使用了docker容器来构建项目&#xff0c;这种方式虽然极大的加快了构建的项目速度&#xff0c;但是也会对之前的本地开发带来一些挑战&#xff0c;比如今天讲到的调试程序&#xff0c;大家对于xdebug一定不会陌生&#xff0c;但是如果php-fpm放到了容器里面&#xff0c;又该…

Meaven的pom文件配置

archtype自动生成的 直接复制讲解一下好了 https://search.maven.org/ maven中央仓库 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.or…

Google 的开源方法论

没有开源&#xff0c;Google 不会有今天的成功。在本周举行的北美 Linux 大会上&#xff0c;Google 工程师 Merlin 从一个第三方视角概括了 Google 是如何使用和为开源做出贡献。自 2002 年以来&#xff0c;Marc Merlin 一直担任 Google 的工程师&#xff0c;期间做过许多开源项…

修改Eclipse/MyEclipse项目的默认编码

转载自 修改Eclipse/MyEclipse项目的默认编码最近遇到问题&#xff0c;在myeclipse新建或导入项目后&#xff0c;有些文件中文显示乱码&#xff0c;每次都要在项目property中修改其编码&#xff0c;所以想到一次性解决所有编码问题&#xff0c;让项目新建或导入之后自动是utf…

hashmap存多少条数据_干货 | 面试官想问的HashMap,都在这一篇里面了!

来源公众号&#xff1a;非科班的科班本文思维导图HashMap简介HashMap 是很常用的一种集合框架&#xff0c;其底层实现方式在 JDK 1.7和 JDK 1.8中却有很大区别。HashMap 是用来存储数据的&#xff0c;它底层在JDK 1.7是数组链表实现的&#xff0c;而JDK 1.8是使用数组链表红黑树…

StackExchange.Redis客户端读写主从配置,以及哨兵配置

今天简单分享一下StackExchange.Redis客户端中配置主从分离以及哨兵的配置。 关于哨兵如果有不了解的朋友&#xff0c;可以看我之前的一篇分享&#xff0c;当然主从复制文章也可以找到。http://www.cnblogs.com/tdws/tag/NoSql/ 为什么要有这篇分享呢&#xff0c;是因为我之前也…

Windows7下如何设置MyEclipse2014字体大小

转载自 Windows7下如何设置MyEclipse2014字体大小Java开发工具MyEclipse2014&#xff0c;安装完毕后发现字体过小&#xff0c;并且对眼睛不好&#xff0c;该如何设置这个开发工具里整体字体大小。设置MyEclipse字体大小&#xff0c;具体实现看下面详细描述双击“MyEclipse Pr…

项目的包结构 mybatis三剑客

mybatis三剑客 1.mybatis generator 数据库自动生成pojo对象类 xml 是dao接口的实现 service调用dao mybatis gentenrator generatorConfig.xml 直接复制 讲解一下 datasource.properties 直接复制 讲解一下 修改一下dao的实现mapper createTime 和 updateT…

css img 适配尺寸_CSS容易使人蒙圈的几个经典问题

本文摘自这一年来自己在工作中经历的几个比较好的CSS问题(不一定复杂&#xff0c;但个人觉得都挺值得一说)&#xff0c;同时也准备了2个JS问题一、CSS篇1.1 元素默认蓝色边框input标签元素(如button、text 、areatext)的一些事件(如click、focus等)&#xff0c;在很多浏览器下默…