children 是 JavaFX 类型的 ScalaFX Pane 吗?
Are the children of a ScalaFX Pane of JavaFX type?
我对 Scala 和 ScalaFX 很陌生,所以我可能没有正确理解这一点。
我的问题:我将节点(f.e.Button)添加到 ScalaFX 窗格(f.e.VBox)。
当我访问窗格的 children 时,children 类型从 ScalaFX 按钮更改为 JavaFX 按钮。
当我查看 ScalaFX 的源代码时,我发现一切都是通过委托完成的。那么ScalaFX节点丢失了吗?我认为通过从 ScalaFX 到 JavaFX 的隐式转换(对我这个新手来说)有一些魔力。是否可以反过来进行隐式转换?我是否正确使用 ScalaFX?
我想遍历所有 children 个窗格。当 child 来自特殊类型时,我想用这个 child 执行一些操作。现在我必须检查 JavaFX 类型并在 JavaFX 节点上工作,这对我来说看起来不像干净的代码。
欢迎任何意见。提前致谢。
我附上了一个运行例子。
import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene
import scalafx.scene.control.Button
import scalafx.scene.layout.VBox
import scalafx.stage.WindowEvent
object TestChildren extends JFXApp {
stage = new PrimaryStage {
val contentPane = new VBox()
val b1 = new Button("B1")
contentPane.children.add(b1)
scene = new Scene (contentPane)
println(b1.getClass)
println("--")
for (child <- contentPane.children) {
println(child.getClass)
}
}
}
是的,有一个隐式转换。我不知道您使用的是哪个 IDE,但是例如带有 Scala 插件的 IntelliJ 14.1 指示隐式转换,这是一个非常有用的功能。
在你的情况下,
contentPane.children.add(b1)
是隐式转换发生的行。显式形式是
contentPane.children.add(Button.sfxButton2jfx(b1))
其中隐式转换是 scalafx.scene.control.Button
中的一行:
implicit def sfxButton2jfx(v: Button): jfxsc.Button = if (v != null) v.delegate else null
我对 Scala 和 ScalaFX 很陌生,所以我可能没有正确理解这一点。 我的问题:我将节点(f.e.Button)添加到 ScalaFX 窗格(f.e.VBox)。 当我访问窗格的 children 时,children 类型从 ScalaFX 按钮更改为 JavaFX 按钮。
当我查看 ScalaFX 的源代码时,我发现一切都是通过委托完成的。那么ScalaFX节点丢失了吗?我认为通过从 ScalaFX 到 JavaFX 的隐式转换(对我这个新手来说)有一些魔力。是否可以反过来进行隐式转换?我是否正确使用 ScalaFX?
我想遍历所有 children 个窗格。当 child 来自特殊类型时,我想用这个 child 执行一些操作。现在我必须检查 JavaFX 类型并在 JavaFX 节点上工作,这对我来说看起来不像干净的代码。
欢迎任何意见。提前致谢。
我附上了一个运行例子。
import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene
import scalafx.scene.control.Button
import scalafx.scene.layout.VBox
import scalafx.stage.WindowEvent
object TestChildren extends JFXApp {
stage = new PrimaryStage {
val contentPane = new VBox()
val b1 = new Button("B1")
contentPane.children.add(b1)
scene = new Scene (contentPane)
println(b1.getClass)
println("--")
for (child <- contentPane.children) {
println(child.getClass)
}
}
}
是的,有一个隐式转换。我不知道您使用的是哪个 IDE,但是例如带有 Scala 插件的 IntelliJ 14.1 指示隐式转换,这是一个非常有用的功能。
在你的情况下,
contentPane.children.add(b1)
是隐式转换发生的行。显式形式是
contentPane.children.add(Button.sfxButton2jfx(b1))
其中隐式转换是 scalafx.scene.control.Button
中的一行:
implicit def sfxButton2jfx(v: Button): jfxsc.Button = if (v != null) v.delegate else null