我有一个表列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
根据文档的超类。
如果我自己使用.asInstanceOf[ObservableValue[Boolean, Boolean]]
它进行投射,则似乎可以正常工作。这里发生了什么?
简短的答案是:而不是
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]]
,尽管类型参数在编译时不匹配,但转换仍然有效。
感谢您提供完整的代码示例(要点),这确实有助于阐明问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句