JavaFx实现倒计时按钮组件(类似发送激活码)

原文地址: JavaFx实现倒计时按钮组件(类似发送激活码) - Stars-One的杂货小窝

本文基于TornadoFx框架进行编写,封装工具代码是kotlin版本

然后也是顺便把这个封装成了stars-one/common-controls
里的xCountDownBtn

效果

思路

点击按钮的时候,将当前按钮设置为禁用状态,之后开启一个线程去倒计时,间隔1s修改一下按钮的文本文字,当倒计时结束的时候,将按钮从禁用状态改为正常状态即可

在JavaFx中,由于提供了对应的观察者模式,按钮的文本和禁用状态都是与某个数据绑定,之后修改这个数据即可实现修改文本和状态的功能,还是挺方便的

下面的是简单的源代码

代码

//倒计时的按钮提示
val tip = "发送验证码"
val codeTip = SimpleStringProperty(tip)
val time = SimpleIntegerProperty(0)

jfxbutton(codeTip) {
    disableWhen { time.greaterThan(0) }

    time.addListener { _, _, newValue ->
        runLater {
            if (newValue == 0) {
                codeTip.value = tip
            } else {
                codeTip.value = "$tip $newValue"
            }
        }
    }
    action {
       
        //todo 你的逻辑..
        
        time.value = 60
        
        runAsync {
            repeat(60) {
                runLater {
                    time.value = time.value - 1
                }
                Thread.sleep(1000)
            }
        }
        
    }
}
posted @ 2023-05-11 23:14  Stars-one  阅读(211)  评论(0编辑  收藏  举报