阅读 95

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()

参考

来源https://www.cnblogs.com/stars-one/p/15389780.html

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐