6

JavaFx 实现水平滚动文本(跑马灯效果) - Stars-one

 1 year ago
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.
neoserver,ios ssh client

JavaFx 实现水平滚动文本(跑马灯效果)

本文为作者原创,允许转载,不过请在文章开头明显处注明链接和出处!!! 谢谢配合~
作者:stars-one
链接:https://www.cnblogs.com/stars-one/p/17359425.html

本篇大约有1286个字,阅读预计需要1.61分钟


原文地址: JavaFx 实现水平滚动文本(跑马灯效果) - Stars-One的杂货小窝

本文是以TornadoFx框架进行编写,各位使用JavaFx可以参考

代码已经封装在common-controls库中

1210268-20230427155605122-309971504.gif

实现原理就是利用了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("      这是一个测试公告信息...")

提问之前,请先看提问须知 点击右侧图标发起提问

或者加入QQ群一起学习

TornadoFx学习交流群:1071184701

1210268-20200316120825333-1551152974.png
1210268-20190508151523126-971809604.gif

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK