原文地址: 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)            }        }            }}

提问之前,请先看提问须知点击右侧图标发起提问或者加入QQ群一起学习TornadoFx学习交流群:1071184701<!––>