首页 > 解决方案 > ScalaFx Group 包裹节点数据提取

问题描述

尝试提取 Group 包装的节点数据似乎非常棘手。任何指针在节点对象(根据定义没有子对象)中获取数据,如下面的代码我想在 Group(VBox(Rectangle)) 中获取 Rectangle.userData?

def west(): Unit = {
  def boxPart(ix: Int): VBox = new VBox {
    padding = Insets(2, 5, 8, 5)
    userData = "My userData VBox wrap"
    children = (
      new Rectangle {
        width = 250 
        height = 125 
        fill = Color.DeepSkyBlue
        userData = "My userData Rectangle wrap"+ix.toString
      }
    )
  } 

  val packet = new Group(boxPart(12345))

  val vboxproof = packet.children.get(0).userData

  println("TESTER:" + vboxproof)

  // getting rectangle userData ???
}

west

标签: scalafx

解决方案


的孩子Group是通用Node的。您需要访问孩子的实际类型才能访问其他属性。另请记住,您正在导航 JavaFX 场景图,因此需要将子级“强制转换”为 JavaFX 类型。您可以vboxproof使用类似这样的东西来创建以下内容的孩子VBox

  val vboxproof = packet.children.get(0) match {
    case v : javafx.scene.layout.VBox => v.children.get(0).userData
    case v => "Unexpected type: " + v.getClass.getName
  }

推荐阅读