原文地址: 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)的更多相关文章

  1. javafx 监听选择变化(TabPane)

    editTab.getSelectionModel().selectedIndexProperty().addListener(evnt); javafx2.0 监听树和表的选择变化 Swing中的组 ...

  2. 利用JavaFx开发RIA桌面应用-事件监听

    1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...

  3. 作业调度框架Quartz.NET-现学现用-02-任务监听

    原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ...

  4. 作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书

    原文:作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. ...

  5. 即时搜索或input实时检测监听输入框变化

    js实现的文本框内容发生改变立马触发事件简单介绍:本章节介绍一下如何在文本框的内容发生变化的时候,立马触发一个事件执行响应的操作,而不是像是keydow或者keyup事件一样,只能够检测通过键盘输入导 ...

  6. input实时监听value change

    oninput ie9+,otheronpropertychange  ie6-8 js使用 var el = docuemnt.getElementById('id'); if('oninput' ...

  7. ORA-12518: TNS: 监听程序无法分发客户机连接

    在团队成员增多时,经常出现“无法分发客户端连接”等问题.在网上搜索一番后,最终解决了该问题,现将解决方案总结如下,以供参考和以后备用. 原因:团队成员增多,原有数据库设置不够用,导致连接plsql和启 ...

  8. 监听文本框输入开发仿新浪微博限制输入字数的textarea插件

    监听文本框输入 Firefox.Chrome.IE9,IE10 均支持 oninput 事件,此外所有版本的 IE 均支持 onpropertychange 事件. oninput 事件在用户输入.退 ...

  9. oracle 11G创建表空间、用户、配置监听和TNS

    最近总在安装各种版本的oralce数据库做测试,11G,32位的,64位的,12C的,每次都折腾表空间,用户.tns啥的,这里记录下,再也不用现用现百度找了 一.创建表空间.用户  在plsql工具中 ...

随机推荐

  1. 如何从 vue-element-admin 迁移到 Fantastic-admin

    // FIXME 链接更新 如果你还不知道 Fantastic-admin 是什么,那么我先用几张预览图给大家了解一番. 看来预览图,如果你感兴趣,可以点这里来详细了解并试用,这是一款完成度极高,开箱 ...

  2. spring AOP事务

    1 <bean id="tttt" class="com.ry.project.dataSouces.UserLogger"/> 2 <aop ...

  3. 求证:-1/2 <= {2x} - {x} < 1/2

    证:由 x = [x] + {x},知2x = 2[x] + 2{x}. 1.若{x}落在[0,1/2),则2{x} < 1,于是有{2x} = 2{x},此时 {2x} - {x} = {x} ...

  4. Qt学习日记篇-Qt中使用Curl和jsonCpp

    1.Qt中安装并使用jsonCPP库 1.1  官网下载.https://sourceforge.net/projects/jsoncpp/    解压文件得到 jsoncpp-src-0.5.0 文 ...

  5. css 文字超出俩行省略号显示

    .center-titles{ overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: ...

  6. Onenote实现OCR识别图片

    OCR识别推荐两个软件: 1.       Tesseract:一个开源的,由谷歌维护的OCR软件. 2.       Onenote:微软Office附带或者可以自己独立安装. 3.       O ...

  7. [Elasticsearch] ES更新问题踩坑记录

    问题描述 我们有个系统设计的时候针对Hive创建表.删除表, 需要更新ES中的一个状态,标记是否删除,在几乎同时执行两条下面的语句的时候,发现在ES 中出现表即使被创建了还是无法被查询到的情况,针对该 ...

  8. noip模拟30

    \(\color{white}{\mathbb{缀以无尽之群星点点,饰以常青之巨木郁郁,可细斟木纹叶脉,独无可极苍穹之览,名之以:密林}}\) 看完题后感觉整套题都没什么思路,而且基本上整场考试确实是 ...

  9. Pytest系列(12)- 测试结果生成HTML报告插件之pytest-html的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 环境前提 Python3.6+ 安 ...

  10. 安全测试工具(1)- Burp Suite Pro的安装教程

    啥是Burp Suite 用于攻击web 应用程序的集成平台 程序员必备技能,不仅可以拿来做渗透测试.漏洞挖掘还能帮助程序员调试程序 Bug 它包含了许多Burp工具,这些不同的burp工具通过协同工 ...