原文地址: JavaFx 實現水平滾動文本(跑馬燈效果) - Stars-One的雜貨小窩 本文是以TornadoFx框架進行編寫,各位使用JavaFx可以參考 代碼已經封裝在common-controls庫中 效果 代碼 實現原理就是利用了JavaFx里的動畫效果去修改scrollpane的tra ...
本文是以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(" 這是一個測試公告信息...")
提問之前,請先看提問須知 點擊右側圖標發起提問 或者加入QQ群一起學習 TornadoFx學習交流群:1071184701