JavaFx 监听剪切板实现(Kotlin)
原文地址: JavaFx 监听剪切板实现(Kotlin) | Stars-One的杂货小窝
软件有个需求,想要实现监听剪切板的内容,若内容符合预期,则进行相关的操作,就可以免去用户手动粘贴的操作,提供软件的用户体验感
比如说之前我的一款下载小说的软件,复制小说的地址后,实现自动解析功能
本篇代码以Kotlin为主,Java实现也是类似,各位可以参考下
实现
本质上是利用一个剪切板的setContents方法,可以传递个监听接口ClipboardOwner
定义个类实现此接口ClipboardOwner,实现此接口定义个的方法lostOwnership
class SystemClipboardMonitor : ClipboardOwner {
    private val clipboard = Toolkit.getDefaultToolkit().systemClipboard
    //定义个变量,用来控制监听的开关
    private var isOpenListener = true
    //定义个接口回调,方便在使用的时候回调
    var listener: GlobalClipBoardListener? = null
    init {
        clipboard.setContents(clipboard.getContents(null), this)
    }
    override fun lostOwnership(clipboard: Clipboard?, contents: Transferable?) {
        try {
            Thread.sleep(1)
            var text = ""
            if (clipboard?.isDataFlavorAvailable(DataFlavor.stringFlavor) == true) {
                text = clipboard.getData(DataFlavor.stringFlavor).toString()
            }
            clipboard?.setContents(clipboard.getContents(null), this)
            if (isOpenListener) {
                listener?.onCopy(text, clipboard, contents)
            }
        } catch (e: IllegalStateException) {
            //有时候会出现剪切板被占用就会出现此异常
        }
    }
    /**
     * 移除监听
     *
     */
    fun stopListen() {
        isOpenListener = false
    }
    /**
     * 开启监听
     *
     */
    fun startListen() {
        isOpenListener = true
    }
    fun addClipboardListener(listener: GlobalClipBoardListener) {
        this.listener = listener
    }
}
interface GlobalClipBoardListener {
    fun onCopy(text: String?, clipboard: Clipboard?, contents: Transferable?)
}
使用
使用的话,新建一个SystemClipboardMonitor对象即可,之后设置你的监听操作,如下面所示
val monitor = SystemClipboardMonitor()
monitor.addClipboardListener(object :GlobalClipBoardListener{
    override fun onCopy(text: String?, clipboard: Clipboard?, contents: Transferable?) {
        //这里可以加上相关的判断来测试内容是否是符合自己的定义的条件才触发对应的操作
        println("已监听到方法...")
        println(text)
    }
})
考虑到会有设置的选项,就定义了两个开关方法,可以在需要的时候进行开关的设置(默认是剪切板的监听就是开启的)
//开启监听
monitor.stopListen()
//停止监听
monitor.startListen()
参考
JavaFx 监听剪切板实现(Kotlin)的更多相关文章
- javafx 监听选择变化(TabPane)
		editTab.getSelectionModel().selectedIndexProperty().addListener(evnt); javafx2.0 监听树和表的选择变化 Swing中的组 ... 
- 利用JavaFx开发RIA桌面应用-事件监听
		1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ... 
- 作业调度框架Quartz.NET-现学现用-02-任务监听
		原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ... 
- 作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书
		原文:作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. ... 
- 即时搜索或input实时检测监听输入框变化
		js实现的文本框内容发生改变立马触发事件简单介绍:本章节介绍一下如何在文本框的内容发生变化的时候,立马触发一个事件执行响应的操作,而不是像是keydow或者keyup事件一样,只能够检测通过键盘输入导 ... 
- input实时监听value change
		oninput ie9+,otheronpropertychange ie6-8 js使用 var el = docuemnt.getElementById('id'); if('oninput' ... 
- ORA-12518: TNS: 监听程序无法分发客户机连接
		在团队成员增多时,经常出现“无法分发客户端连接”等问题.在网上搜索一番后,最终解决了该问题,现将解决方案总结如下,以供参考和以后备用. 原因:团队成员增多,原有数据库设置不够用,导致连接plsql和启 ... 
- 监听文本框输入开发仿新浪微博限制输入字数的textarea插件
		监听文本框输入 Firefox.Chrome.IE9,IE10 均支持 oninput 事件,此外所有版本的 IE 均支持 onpropertychange 事件. oninput 事件在用户输入.退 ... 
- oracle 11G创建表空间、用户、配置监听和TNS
		最近总在安装各种版本的oralce数据库做测试,11G,32位的,64位的,12C的,每次都折腾表空间,用户.tns啥的,这里记录下,再也不用现用现百度找了 一.创建表空间.用户 在plsql工具中 ... 
随机推荐
- Qt5之正则表达式
			字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 '\\' 匹配 ... 
- 【odoo】【知识杂谈】单一实例多库模式下定时任务的问题分析
			欢迎转载,但需标注出处,谢谢! 背景: 有客户反应有个别模块下的定时任务没有正常执行,是否是新装的模块哪些有问题?排查后发现,客户是在一台服务器上跑着一个odoo容器,对应多个数据库.个别库的定时任务 ... 
- Kubernetes-kubectl介绍
			前言 本篇是Kubernetes第三篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战.本篇重要介绍kubectl的使用. Kubernetes系列文章: Kubernetes介绍 Kuber ... 
- Python - 面向对象编程 - 实战(5)
			前言 主要是针对静态方法.类方法.实例方法.类属性.实例属性的混合实战 需求 设计一个 Game 类 属性 定义一个类属性 top_score 记录游戏的历史最高分,这个属性很明显只跟游戏有关,跟实例 ... 
- Appium问题解决方案(3)- java.lang.IllegalStateException: UiAutomation not connected!
			背景 连着手机,运行脚本,一段时间之后就报错了,看了Appium-server,发现报了这样一个错误 如何解决呢? 步骤一 通过 adb devices ,确定设备是否已连接上 步骤二(最终解决方案) ... 
- Python中正则表达式简介
			目录 一.什么是正则表达式 二.正则表达式的基础知识 1. 原子 1)普通字符作为原子 2)非打印字符作为原子 3) 通用字符作为原子 4) 原子表 2. 元字符 1)任意匹配元字符 2)边界限制元字 ... 
- centos7修改服务器时区
			查看时区设置 timedatectl 列出所有时区,通过键盘上下键进行浏览 timedatectl list-timezones 修改服务器时区为Africa/Lagos # 拉各斯的时区,UTC+1 ... 
- wpf内存泄漏问题
			http://www.cnblogs.com/Cindys/archive/2012/05/17/2505893.html http://blogs.msdn.com/b/jgoldb/archive ... 
- PHP中的PDO操作学习(四)查询结构集
			关于 PDO 的最后一篇文章,我们就以查询结果集的操作为结束.在数据库的操作中,查询往往占的比例非常高.在日常的开发中,大部分的业务都是读多写少型的业务,所以掌握好查询相关的操作是我们学习的重要内容. ... 
- Java面向对象系列(10)- 什么是多态
			多态 即同一方法可以根据发送对象的不同而采取不同的行为方式 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多 多态存在的条件 有继承关系 子类重写父类方法 父类引用指向子类对象 注意:多态是 ... 
