java - 更改TornadoFX TableView行背景颜色,同时仍突出显示所选行

标签 java javafx kotlin tornadofx

我在TornadoFX应用程序中有一个TableView。此TableView显示测试列表及其状态(未启动,已启动,通过,失败)。我希望通过的测试行为绿色,而失败的测试行为红色。我已经将行设置为正确的颜色,但是当我在表中选择一行时,该行不再突出显示。

如何更改此格式以突出显示选定的行并给行上色以反射(reflect)该测试是否通过?

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)
            }
        }
    }
}

现在,您使用规则“通过”和“失败”。代替:
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)     
}

关于java - 更改TornadoFX TableView行背景颜色,同时仍突出显示所选行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53688552/

相关文章:

java - 将JavaFX TextField添加到JPanel

kotlin - Kotlin foreachblock示例

kotlin - 处理可以在Kotlin中返回null的对象

java - 如何在 Hibernate 模板中执行更新(命名查询)?

java - throws 和 catch 子句

java - 在Java应用程序中执行“sp_msforeachdb”

java - Java HashMap到矩阵

css - JavaFx 如何在 CSS 中使用 Java 生成的 RGB 颜色

JavaFX 窗口在内部细化期间没有响应

android - 在 Fragment 中获取相同的 ViewModel 实例,该实例在 Activity 中使用参数定义