簡體   English   中英

是JavaFX類型的ScalaFX窗格的子代嗎?

[英]Are the children of a ScalaFX Pane of JavaFX type?

我對Scala和ScalaFX非常陌生,因此我可能無法正確理解。 我的問題:我向ScalaFX窗格(fe VBox)中添加了一個節點(fe Button)。 當我訪問窗格的子級時,子級類型從ScalaFX Button更改為JavaFX Button。

當我查看ScalaFX的源代碼時,我可以看到一切都由委托完成。 那么ScalaFX節點丟失了嗎? 我認為通過從ScalaFX到JavaFX的隱式轉換,已經做了一些魔術(對我而言,是一個新手)。 是否可以反過來進行隱式轉換? 我可以正確使用ScalaFX嗎?

我想瀏覽窗格的所有子項。 當一個孩子來自特殊類型時,我想對該孩子執行一些操作。 現在,我必須檢查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中的隱式轉換是scalafx.scene.control.Button

implicit def sfxButton2jfx(v: Button): jfxsc.Button = if (v != null) v.delegate else null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM