【转】【Java】剪切板操作大全
时间:2020-05-18
本文章向大家介绍【转】【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; } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (flavor.equals(flavors[RANGE])) { return data; } else { throw new UnsupportedFlavorException(flavor); } } @Override public DataFlavor[] getTransferDataFlavors() { return (DataFlavor[]) flavors.clone(); } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { for (int i = 0; i < flavors.length; i++) { if (flavor.equals(flavors[i])) { return true; } } return false; } @Override public 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/
原文地址:https://www.cnblogs.com/xiaostudy/p/12909146.html
- WPF 给控件添加复制事作
- wpf RoutedUICommand 绑定
- jsp中的JSTL与EL表达式用法及区别(一)
- java线程池模型
- lock小记
- HTML布局的基本要点
- Building a Middle Tier Component using NHibernate and Spring.NET
- Linq 和DefaultView两种方法去掉DataTable 里的重复行
- MySQL事务autocommit自动提交
- wcf webHttpBinding Post 大数据量提交 ios c#客户端
- 你现在还在手动生成set,get方法吗?
- ios 接收 c# socket udp 组播
- 大数据基础系列之JAVA引用详解
- Java集合深度解析之ArrayList
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 微信小程序开发实战(15):视频组件(video)
- LeetCode 91,点赞和反对五五开,这题是好是坏由你来评判
- 打破国外垄断,开发中国人自己的编程语言(1):编写解析表达式的计算器
- 在CentOS8上编译安装开源EDA工具——Surelog
- 直播带货小程序源码中,商品详情页是如何获取html图片的
- LeetCode 90 | 经典递归问题,求出所有不重复的子集II
- 万字长文|Swift语法全面解析|附示例
- sshd服务搭建与管理
- Airflow Dag可视化管理编辑工具Airflow Console
- 使用 Clientset 获取 Kubernetes 资源对象
- Python爬虫 - 解决动态网页信息抓取问题
- Java内存故障?只是因为你不够帅!
- 线程池的execute方法和submit方法有什么区别?
- os.mkdir()
- Java自动化测试(Jmeter 12)