更改 TornadoFX TableView 行背景颜色,同时仍突出显示所选行
Change TornadoFX TableView row background color while still highlighting selected rows
我在 TornadoFX 应用程序中有一个 TableView。此 TableView 显示测试列表及其状态(未开始、已开始、通过、失败)。我希望通过的测试行是绿色的,失败的测试行是红色的。我已将行设置为正确的颜色,但是当我 select 在 table 中的一行时,它不再突出显示。
如何更改此格式以突出显示 selected 行并为行着色以反映该测试是通过还是失败?
tableview = tableview(tests) {
readonlyColumn("Test Name", Test::fileName)
column("Test Execution Status", Test::statusProperty).cellFormat {
text = it.toString()
if (it == TestStatus.PASS)
this.tableRow.style(append = true) { backgroundColor += c("#4CAF50", .5) }
else if (it == TestStatus.FAIL)
this.tableRow.style(append = true) { backgroundColor += c("#FF5722", .5) }
}
columnResizePolicy = SmartResize.POLICY
vgrow = Priority.ALWAYS
selectionModel.selectionMode = SelectionMode.MULTIPLE
bindSelected(lastSelectedTestInTable)
}
我不是专家。我不知道是否有办法使用您的确切方法回答您的问题(使用 inlinecss 并设置 backgroundColor 而不影响所选行的 backgroundColor)。我的解决方案使用 StyleSheet 并为行的选定状态设置独立的 backgroundColor。
class Style : Stylesheet() {
companion object {
val pass by cssclass()
val fail by cssclass()
}
init {
pass{
backgroundColor += c("#4CAF50", .5)
and(selected){
backgroundColor += c("#0096C9", .5)
}
}
fail{
backgroundColor += c("#FF5722", .5)
and(selected){
backgroundColor += c("#0096C9", .5)
}
}
}
}
现在您使用规则 "pass" 和 "fail"。而不是:
this.tableRow.style(append = true) { backgroundColor += c("#4CAF50", .5) }
您使用:
this.tableRow.addClass(Style.pass)
而不是:
this.tableRow.style(append = true) { backgroundColor += c("#FF5722", .5) }
您使用:
this.tableRow.addClass(Style.fail)
请记住,您需要将 Style::class 添加到您的应用程序构造函数中。
编辑:
按照 Edvin Syse 的建议使用 toggleClass。而不是:
column("Test Execution Status", Test::statusProperty).cellFormat {
text = it.toString()
if (it == TestStatus.PASS)
this.tableRow.addClass(Style.pass)
else if (it == TestStatus.FAIL)
this.tableRow.addClass(Style.fail)
}
您使用:
column("Test Execution Status", Test::statusProperty).cellFormat {
text = it.toString()
this.tableRow.toggleClass(Style.fail,it == TestStatus.FAIL)
this.tableRow.toggleClass(Style.pass,it == TestStatus.PASS)
}
我在 TornadoFX 应用程序中有一个 TableView。此 TableView 显示测试列表及其状态(未开始、已开始、通过、失败)。我希望通过的测试行是绿色的,失败的测试行是红色的。我已将行设置为正确的颜色,但是当我 select 在 table 中的一行时,它不再突出显示。
如何更改此格式以突出显示 selected 行并为行着色以反映该测试是通过还是失败?
tableview = tableview(tests) {
readonlyColumn("Test Name", Test::fileName)
column("Test Execution Status", Test::statusProperty).cellFormat {
text = it.toString()
if (it == TestStatus.PASS)
this.tableRow.style(append = true) { backgroundColor += c("#4CAF50", .5) }
else if (it == TestStatus.FAIL)
this.tableRow.style(append = true) { backgroundColor += c("#FF5722", .5) }
}
columnResizePolicy = SmartResize.POLICY
vgrow = Priority.ALWAYS
selectionModel.selectionMode = SelectionMode.MULTIPLE
bindSelected(lastSelectedTestInTable)
}
我不是专家。我不知道是否有办法使用您的确切方法回答您的问题(使用 inlinecss 并设置 backgroundColor 而不影响所选行的 backgroundColor)。我的解决方案使用 StyleSheet 并为行的选定状态设置独立的 backgroundColor。
class Style : Stylesheet() {
companion object {
val pass by cssclass()
val fail by cssclass()
}
init {
pass{
backgroundColor += c("#4CAF50", .5)
and(selected){
backgroundColor += c("#0096C9", .5)
}
}
fail{
backgroundColor += c("#FF5722", .5)
and(selected){
backgroundColor += c("#0096C9", .5)
}
}
}
}
现在您使用规则 "pass" 和 "fail"。而不是:
this.tableRow.style(append = true) { backgroundColor += c("#4CAF50", .5) }
您使用:
this.tableRow.addClass(Style.pass)
而不是:
this.tableRow.style(append = true) { backgroundColor += c("#FF5722", .5) }
您使用:
this.tableRow.addClass(Style.fail)
请记住,您需要将 Style::class 添加到您的应用程序构造函数中。
编辑:
按照 Edvin Syse 的建议使用 toggleClass。而不是:
column("Test Execution Status", Test::statusProperty).cellFormat {
text = it.toString()
if (it == TestStatus.PASS)
this.tableRow.addClass(Style.pass)
else if (it == TestStatus.FAIL)
this.tableRow.addClass(Style.fail)
}
您使用:
column("Test Execution Status", Test::statusProperty).cellFormat {
text = it.toString()
this.tableRow.toggleClass(Style.fail,it == TestStatus.FAIL)
this.tableRow.toggleClass(Style.pass,it == TestStatus.PASS)
}