将布尔值 (属性) 绑定到 JavaFX 中的列表操作

Binding boolean (Property) to List operations in JavaFX

在克服了我必须将每个字段重新声明为 属性 的事实后,我发现 JavaFX 的表现力出人意料,所以我有点难过,想知道是否有更好、更惯用的方法将布尔值绑定到一些更复杂的操作,例如添加和删除样式 classes。

在这个例子中,我有一个可能有效或无效的项目,我希望选项卡的字体颜色表明它是哪个项目。我通过添加和删除错误样式 class:

来做到这一点
    val errorSwitch = { valid : Boolean ->
        logger.debug {"errorSwitcher: $valid"}
        if( valid) tab.styleClass.remove("error")
        else tab.styleClass.add("error")
        Unit
    }
    product.isValid.onChange (errorSwitch)
    errorSwitch(product.isValid.value)

这里我不喜欢的是我必须自己调用一次函数才能开始,因为 "onChange" 显然不会触发,除非 isValid 实际发生变化。这是一件小事,但我想知道是否有更好的绑定方法,因为这就是我想要的:错误 class 的存在应该绑定到 "isValid"

在 TornadoFX 中,实现此目的的最佳方法是使用 toggleClass 函数,该函数将根据布尔可观察值自动添加或删除给定的 class。因此你可以简单地说:

tab.toggleClass(Styles.error, product.isValid)

此示例要求您使用 TornadoFX 的类型安全 CSS 功能。在指南中阅读有关类型安全 CSS 的更多信息:)