我有以下代码来定义一个表格视图,其中特定的单元格会根据情况改变颜色。
如何定义类型安全样式表类并将其应用于当前代码以防止将来重复?
class MonitorView : View("Monitor") {
override val root = borderpane {
center = tableview<ServerModel> {
items = readConfiguration().observable()
readonlyColumn("Environment", ServerModel::env)
readonlyColumn("Host", ServerModel::host)
readonlyColumn("Port", ServerModel::port)
readonlyColumn("Application Name", ServerModel::appName)
column("Is online", ServerModel::isReachable).cellFormat {
styleDependingOnBoolean(it)
graphic = hbox {
button("Restart").action {
isDisable = true
}
}
}
}
}
private fun TableCell<ServerModel, Boolean>.styleDependingOnBoolean(it: Boolean) {
if (it) {
style = "-fx-background-color:#00b200; -fx-text-fill:white"
text = it.toString()
} else {
style = "-fx-background-color:#8b0000; -fx-text-fill:white"
text = it.toString()
}
}
}
答案 0 :(得分:0)
如果我理解正确,那么您正在寻找类似于以下内容的东西;
javafxNode.getStyleClass().add("myCssClass");
// passing true here will activate your css code below
javafxNode.pseudoClassStateChanged("myPseudoClass",yourBoolean);
在您的CSS文件中:
.myCssClass:myPseudoClass{
-fx-text-fill:white
}
答案 1 :(得分:0)
您可以创建类型安全的样式表,并为此连接列创建具有默认背景色的选择器。然后添加另一个称为“可达”的选择器,该选择器将覆盖此颜色,如下所示:
class MyStyles : Stylesheet() {
companion object {
val reachable by cssclass()
val connectivityColumn by cssclass()
}
init {
connectivityColumn {
backgroundColor += c("#8b0000")
}
connectivityColumn and reachable {
backgroundColor += c("#00b200")
}
}
}
确保此列获取connectivityColumn
类,并使用reachable
切换toggleClass
状态:
column("Reachable", Server::reachableProperty) {
addClass(MyStyles.connectivityColumn)
cellFormat {
toggleClass(MyStyles.reachable, item)
graphic = hbox {
button("Restart")
}
}
}
请注意,这仅在重新绘制表格视图时更新颜色。如果在不重绘表视图时需要根据外部事件更新颜色,请触发事件以重绘它,或者改用绑定。如果您对第一种方法有所了解,我会推荐它,因为它不附加任何侦听器。