javafx - 表格视图单元格的类型安全样式表,具体取决于条件
问题描述
我有以下代码来定义一个表格视图,其中特定单元格根据条件改变颜色。
如何定义类型安全的样式表类并将其应用于当前代码以防止将来重复?
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()
}
}
}
解决方案
您可以创建一个类型安全的样式表并为此连接列创建一个具有默认背景颜色的选择器。然后添加另一个名为reachable 的选择器,它会覆盖此颜色,如下所示:
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")
}
}
}
请注意,这只在 tableview 重绘时更新颜色。如果您需要在 tableview 不重绘时根据外部事件更新颜色,请触发事件以重绘它,或者使用绑定代替。如果您使用第一种方法获得方法,我会推荐它,因为它不附加任何听众。
推荐阅读
- computational-geometry - 在运行凸包算法之前进行修剪
- reactjs -
尽管函数调用不起作用 - html - 在 flex 容器的整个宽度上对齐内部 Flexbox 项目
- node.js - 如何通过 Inputs() 将对象传递给子组件,但在父组件中更改时从不更新输入
- r - 在 r 中使用 grepl 函数查找 TRUE 和 FALSE 总和
- powershell - 无法将值从数据表转换为日期时间
- xml - XSLT - 分组 XML 数据
- java - 如何显示列表中的最小值和最大值?
- python - 如何在 Python Lambda 中设置分段(顶级)级 AWS Xray 注释
- spring - 编写带有参数的自定义弹簧注释?