考虑以下示例:
class MainView : View("Example") {
val someBooleanProperty: SimpleBooleanProperty = SimpleBooleanProperty(true)
override val root = borderpane {
paddingAll = 20.0
center = button("Change bg color") {
action {
// let's assume that new someBooleanProperty value is updated
// from some API after button clicked
// so changing style of the borderpane in action block
// of the button is not the solution
someBooleanProperty.value = !someBooleanProperty.value
}
}
}
}
class Styles : Stylesheet() {
companion object {
val red by cssclass()
val green by cssclass()
}
init {
red { backgroundColor += Color.RED }
green { backgroundColor += Color.GREEN }
}
}
如何根据borderpane
动态更改someBooleanProperty
的背景颜色(例如true
时的红色和false
时的绿色)?是否有可能将CSS类绑定到属性?是否有任何解决方案可以不使用CSS(意味着在style
块内等)
答案 0 :(得分:2)
如果要切换类(基于布尔属性添加或删除类),可以使用Node.toggleClass(CssRule, ObservableValue<Boolean>)
函数。
val someBooleanProperty = SimpleBooleanProperty(true)
...
borderpane {
toggleClass(Styles.red, someBooleanProperty)
toggleClass(Styles.green, someBooleanProperty.not())
}
另一方面,如果要绑定到更改的类值,可以使用Node.bindClass(ObservableValue<CssRule>)
函数。
val someClassyProperty = SimpleObjectProperty(Styles.red)
...
borderpane {
bindClass(someClassyProperty)
}
然后,您可以将课程设置为您想要的任何内容。