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工具中 ...
随机推荐
- SpringCloud降级熔断 Hystrix
1.分布式核心知识之熔断.降级讲解 简介:系统负载过高,突发流量或者网络等各种异常情况介绍,常用的解决方案 1.熔断: 保险丝,熔断服务,为了防止整个系统故障,包含子和下游服务 下单服 ...
- JAVA中多态与C++多态的区别
原文出自:http://blog.csdn.net/hihui/article/details/8604779 #include <stdio.h> class Base { public ...
- freeswitch新增模块API
概述 上一章我们讲解了freeswitch的源码基本结构,以及如何新增一个插件式模块. freeswitch的架构非常适合这种业务开发模式,即以freeswitch的基本功能为开发平台,新增插件式模块 ...
- Windows-MacOSX-Ubuntu·不同平台文件互传文件共享
时间:2018-11-23 整理:byzqy 标题:Mac下的virtual box 安装的Ubuntu虚拟机互传文件问题 地址:https://blog.csdn.net/qq_20044689/a ...
- Ubuntu 系统安装、配置
windows下制作安装U盘 使用工具:Universal USB Installer ubuntu下制作安装U盘 使用工具:Startup Disk Creator(自带) 选择国内源:Switch ...
- os.read
#-*-coding:utf-8-*-__author__ = "logan.xu"import oscmd_res=os.popen("ls").read() ...
- 微信小游戏 Three.js UI 2D text 简单方案
在微信小游戏中使用 THREE.js 引擎,没有合适的 UI 库可用,只能自己动手.图片啥的都还好,text 不好弄.text 要计算 width 和 height,不然事件响应范围不对. funct ...
- vue 点击复制当前网址
template 部分 <div class="NewNoticeDetails-ctrlButton" @click="copy()"> ...
- CSP 2021 游记
\(\text{Day -INF}\) 看见了 \(\text{SCP2021}\) 的报名通知,想着应该教练会让我们统一报名,就没放在心上 然后-- 然后过了二十多天教练根本没有提报名的事情,搞得我 ...
- Jenkins(7)- 解决Linux下忘记Jenkins密码
如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html admin密码未更改情况下 进入\ ...