网站推荐、资源下载等 | 个人网站

【转】【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/

posted @ 2020-05-18 10:34  xiaostudy  阅读(1449)  评论(0编辑  收藏  举报
网站推荐
[理工最爱]小时百科 |  GitHub |  Gitee |  开源中国社区 |  牛客网 |  不学网论坛 |  r2coding |  冷熊简历 |  爱盘 |  零散坑 |  bootstrap中文网 |  vue.js官网教程 |  源码分享站 |  maven仓库 |  楼教主网站 |  廖雪峰网站 |  w3cschool |  在线API |  代码在线运行 |  [不学网]代码在线运行 |  JS在线运行 |  PHP中文网 |  深度开源eclipse插件 |  文字在线加密解密 |  菜鸟教程 |  慕课网 |  千图网 |  手册网 |  素材兔 |  盘多多 |  悦书PDF |  sumatra PDF |  calibre PDF |  Snipaste截图 |  shareX截图 |  vlc-media-player播放器 |  MCMusic player |  IDM下载器 |  格式工厂 |  插件网 |  谷歌浏览器插件 |  Crx搜搜 |  懒人在线计算器 |  leetcode算法题库 |  layer官网 |  layui官网 |  formSelects官网 |  Fly社区 |  程序员客栈 |  融云 |  华为云 |  阿里云 |  ztree官网API |  teamviewer官网 |  sonarlint官网 |  editormd |  pcmark10官网 |  crx4chrome官网 |  apipost官网 |  花生壳官网 |  serv-u官网 |  杀毒eset官网 |  分流抢票bypass官网 |  懒猴子CG代码生成器官网 |  IT猿网 |  natapp[内网穿透] |  ngrok[内网穿透] |  深蓝穿透[内网穿透] |  WakeMeOnLan[查看ip] |  iis7 |  [漏洞扫描]Dependency_Check官网 |  [图标UI]fontawesome官网 |  idea插件官网 |  路过图床官网 |  sha256在线解密 |  在线正则表达式测试 |  在线文件扫毒 |  KuangStudy | 
资源下载
电脑相关: Windows原装下载msdn我告诉你 |  U盘制作微PE工具官网下载 |  Linux_CentOS官网下载 |  Linux_Ubuntu官网下载 |  Linux_OpenSUSE官网下载 |  IE浏览器官网下载 |  firefox浏览器官网下载 |  百分浏览器官网下载 |  谷歌google浏览器历史版本下载 |  深度deepin系统官网下载 |  中兴新支点操作系统官网下载 |  文件对比工具Beyond Compare官网下载 |  开机启动程序startup-delayer官网下载 |  openoffice官网下载 |  utorrent官网下载 |  qbittorrent官网下载 |  cpu-z官网下载 |  蜘蛛校色仪displaycal官网下载 |  单文件制作greenone下载 |  win清理工具Advanced SystemCare官网下载 |  解压bandizip官网下载 |  内存检测工具memtest官网下载 |  磁盘坏道检测与修复DiskGenius官网下载 |  磁盘占用可视化SpaceSniffer官网下载 |  [磁盘可视化]WizTree官网下载 |  win快速定位文件Everything官网下载 |  文件定位listary官网下载 |  动图gifcam官网下载 |  7-Zip官网下载 |  磁盘分区工具diskgenius官网下载 |  CEB文件查看工具Apabi Reader官网下载 |  罗技鼠标options官网下载 |  [去除重复文件]doublekiller官网下载 | 
编程相关: ApacheServer官网下载 |  Apache官网下载 |  Git官网下载 |  Git高速下载 |  Jboss官网下载 |  Mysql官网下载 |  Mysql官网历史版本下载 |  NetBeans IDE官网下载 |  Spring官网下载 |  Nginx官网下载 |  Resin官网下载 |  Tomcat官网下载 |  jQuery历史版本下载 |  nosql官网下载 |  mongodb官网下载 |  mongodb_linux历史版本下载 |  mongodb客户端下载 |  VScode官网下载 |  cxf官网下载 |  maven官网下载 |  QT官网下载 |  SVN官网下载 |  SVN历史版本下载 |  nodeJS官网下载 |  oracle官网下载 |  jdk官网下载 |  STS官网下载 |  STS历史版本官网下载 |  vue官网下载 |  virtualbox官网下载 |  docker desktop官网下载 |  github desktop官网下载 |  EditPlus官网下载 |  zTree下载 |  layui官网下载 |  jqgrid官网下载 |  jqueryui官网下载 |  solr历史版本下载 |  solr分词器ik-analyzer-solr历史版本下载 |  zookeeper历史版本官网下载 |  nssm官网下载 |  elasticsearch官网下载 |  elasticsearch历史版本官网下载 |  redis官网下载 |  redis历史版本官网下载 |  redis的win版本下载 |  putty官网下载 |  查看svn密码TSvnPD官网下载 |  MongoDB连接工具Robo官网下载 |  dll查看exescope官网下载 |  dll2c官网下载 |  接口测试apipost官网下载 |  接口测试postman官网下载 |  原型设计工具AxureRP官网下载 |  canal官网下载 |  idea主题样式下载 |  vue的GitHub下载 |  finalShell官网下载 |  ETL工具kafka官网下载 |  cavaj[java反编译]官网下载 |  jd-gui[java反编译]官网下载 |  radmin[远程连接]官网下载 |  tcping[win ping端口]下载 |  jQueryUploadFile官网下载 |  RedisPlus下载 |  aiXcoder智能编程助手官网下载 |  [表单效验]validform官网下载 |  idea官网下载 |  RedisStudio下载 |  MD转word含公式pandoc官网下载 |  logviewer官网下载 |  Kafka官网下载 |  hbase高速下载 |  hadoop官网下载 |  hadooponwindows的GitHub下载 |  hive官网下载 |  soapui官网下载 |  flink官网下载 |  kafkatool官网下载 |  MinIO官网下载 |  MinIO中国镜像下载 | 
办公相关工具
免费在线拆分PDF【不超过30M】 |  免费在线PDF转Word【不超过10M】 |  在线文字识别转换【不超过1M】 |  PDF转换成Word【不超过50M】 |  在线OCR识别 |  Smallpdf |  文件转换器Convertio |  迅捷PDF转换器 |  字母大小写转换工具 |  档铺 |  快传airportal[可文字] |  快传-文叔叔 |  P2P-小鹿快传 |  [图床]ImgURL | 
网站入口
腾讯文档 |  有道云笔记网页版 |  为知笔记网页版 |  印象笔记网页版 |  蓝奏云 |  QQ邮箱 |  MindMaster在线思维导图 |  bilibili |  PDM文件在线打开 |  MPP文件在线打开 |  在线PS软件 |  在线WPS |  阿里云企业邮箱登陆入口 | 
其他
PDF转换 |  悦书PDF转换 |  手机号注册查询 |  Reg007 |  akmsg |  ip8_ip查询 |  ipip_ip查询 |  天体运行testtubegames |  测试帧率 |  在线网速测试 |