JavaFx 实现水平滚动文本(跑马灯效果) - Stars-one
source link: https://www.cnblogs.com/stars-one/p/17359425.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
JavaFx 实现水平滚动文本(跑马灯效果)
本文为作者原创,允许转载,不过请在文章开头明显处注明链接和出处!!! 谢谢配合~
作者:stars-one
链接:https://www.cnblogs.com/stars-one/p/17359425.html
本篇大约有1286个字,阅读预计需要1.61分钟
本文是以TornadoFx框架进行编写,各位使用JavaFx可以参考
代码已经封装在common-controls库中
实现原理就是利用了JavaFx里的动画效果去修改scrollpane的translateX属性,原本想在text上改造的,发现文字过多就不行了,最终还是使用了scrollpane组件来完成功能
就是需要注意的是,设置的文本需要处理一下换行符,不然显示效果会很不好看
还有就是,记得文本前面加上几个空格,不然滚动感觉看不了前面的几个字
val simpleNotice=SimpleStringProperty("")
scrollpane {
alignment = Pos.CENTER_LEFT
prefWidth = 560.0
style {
focusColor = Color.TRANSPARENT
borderWidth += box(0.px)
borderColor += box(Color.TRANSPARENT)
hBarPolicy = ScrollPane.ScrollBarPolicy.NEVER
vBarPolicy = ScrollPane.ScrollBarPolicy.NEVER
padding = box(0.px)
}
hbox {
translateY = 5.0
alignment = Pos.CENTER_LEFT
label(simpleNotice) {
val defaultValue = translateXProperty().value
//滚动的逻辑
val rollAction: ((String) -> Unit) = {
val newValue = it
//阅读速度,8个字1s
val time = newValue.length / 8
translateXProperty().animate(-(newValue.length * 10), Duration.seconds(time.toDouble()), Interpolator.LINEAR) {
cycleCount = -1
setOnFinished {
translateXProperty().set(defaultValue)
}
}
}
simpleNotice.onChange {
rollAction.invoke(it?:"")
}
rollAction.invoke(simpleNotice.value)
setOnMouseClicked {
//点击事件
}
}
}
}
simpleNotice.set(" 这是一个测试公告信息...")
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK