zoukankan      html  css  js  c++  java
  • 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()
    

    参考


    提问之前,请先看提问须知 点击右侧图标发起提问 联系我 或者加入QQ群一起学习 Stars-One安卓学习交流群 TornadoFx学习交流群:1071184701
  • 相关阅读:
    Android接入WebView
    james邮件服务器部署
    防止网络攻击的方式
    vue开发遇到的问题及解决方式
    jekins和docker的作用
    设计模式(2)[JS版]---JavaScript如何实现单例模式?
    黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
    什么是JavaScript 的闭包???
    纯CSS实现iOS风格打开关闭选择框
    纯CSS实现自定义单选框和复选框
  • 原文地址:https://www.cnblogs.com/stars-one/p/15389780.html
Copyright © 2011-2022 走看看