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
  • 相关阅读:
    【drp 11】使用Junit简单测试接口方法
    【Struts 1】Struts1的基本原理和简介
    【drp 10】JSP页面中model1和model2的区别
    【drp 9】Servlet生命周期
    【Nginx 3】FTP远程文件下载
    [drp 8]get和post的区别,以及乱码问题的解决
    svn update错误
    easyui只打开一个tab
    ubuntu安装skype
    单独使用CKfinder上传图片
  • 原文地址:https://www.cnblogs.com/stars-one/p/15389780.html
Copyright © 2011-2022 走看看