我在errorFixed
内有TableColumn[Error, Boolean]
类型的表格列TableView[Error]
。我的Error
类有一个val fixed: Boolean
,我尝试将其放入此表格列。
我试过
errorFixed.cellValueFactory = features =>
ReadOnlyBooleanWrapper(features.value.fixed)
但是
失败了type mismatch;
found : scalafx.beans.property.ReadOnlyBooleanWrapper
required: scalafx.beans.value.ObservableValue[Boolean,Boolean]
我真的不明白,因为ObservableValue[Boolean,Boolean]
是ReadOnlyBooleanWrapper
according to the documentation的超类型。
如果我使用.asInstanceOf[ObservableValue[Boolean, Boolean]]
自己投射,它似乎有效。这是怎么回事?
答案 0 :(得分:3)
简短回答是:而不是
errorFixed.cellValueFactory = features =>
ReadOnlyBooleanWrapper(features.value.fixed)
你应该使用
errorFixed.cellValueFactory = features =>
ObjectProperty[Boolean](features.value.fixed)
或ReadOnlyObjectWrapper[Boolean]
。
长答案的简短版本:在处理原始Java类型(如boolean或int)时,Scala和Java之间存在某些“摩擦”。这种不便表现在ScalaFX中的属性绑定中。并非一切都以直观的方式继承。在这种情况下
ReadOnlyBooleanWrapper
是
的子类ObservableValue[scala.Boolean, java.lang.Boolean]
但是scala.Boolean
不是java.lang.Boolean
的子类,在内部,ScalaFX会导致并发症。有趣的是,转换.asInstanceOf[ObservableValue[scala.Boolean, scala.Boolean]]
有效,但类型参数在编译时不匹配。
感谢您提供完整的代码示例(要点),这确实有助于澄清问题。