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工具中 ...
随机推荐
- Python语法之函数、引用和装饰器
所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用 函数是带名字的代码块,用于完成具体的工作 需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用该 任务 ...
- 窗口函数至排序——SQLServer2012可高用
常用到的窗口函数 工作中要常对数据进行分析,分析前要对原始数据中找到想要的格式,数据原本存储的格式不一定时我们想要的,要在基础上进行一定的处理,下面介绍的几种方式是常用的数据排序的集中方式,包含 排名 ...
- RTSP H264/HEVC 流 Wasm 播放
本文将介绍 RTSP H264/HEVC 裸流如何于网页前端播放.涉及 WebSocket 代理发送流数据, Wasm 前端解码等. 代码: https://github.com/ikuokuo/rt ...
- springMVC学习总结(三) --springMVC重定向
根据springMVC学习总结(一) --springMVC搭建搭建项目 在com.myl.controller包下创建一个java类WebController. 在jsp子文件夹下创建一个视图文件i ...
- noip模拟21
开题发现这场考过,定睛一看,发现是省选前最后一场,没改过呀--但是还是讲武德的赛时没提交 A. Median 神奇之处在于 \(1e7\) 个质数居然能线性筛出来~ 那么 \(S2\) 可以直接筛出来 ...
- shell脚本中select循环语句用法
shell脚本中select循环语句 1. 脚本中select的语法格式 select VAR in LIST do command1 command2 ... ... commandN done s ...
- python3 spider [ urllib.request ]
# # 导入urllib库的urlopen函数 # from urllib.request import urlopen # # 发出请求,获取html # html = urlopen(" ...
- IDEA weblogic远程调试
weblogic远程调试 这里我们使用vulhub的镜像作为初始构建镜像搭建漏洞环境 1. 搭建docker环境 新建一个目录,创建两个文件 DockerFile FROM vulhub/weblog ...
- 学习Tomcat(二)之容器概览
Tomcat容器的Server模块有管理容器的启动和关闭.管理了容器内的服务组件Service.管理了全局JNDI资源的功能,对Tomcat容器的生命周期管理有重要意义.Tomcat的服务组件则是To ...
- ThinkCMF5.1主要特性
更改框架协议为MIT,让你更自由地飞 基于ThinkPHP 5.1重构,但核心代码兼容5.0版本,保证老用户最小升级成本 增加对swoole支持,同时支持swoole协程和全同步模式(请单独安装扩展) ...