1

最初の作業コード:

val root: BorderPane = new BorderPane(jfxf.FXMLLoader.load(getClass.getResource("/GUI/main.fxml")))

stage = new PrimaryStage()
{
  title = "FXML Test"
  scene = new Scene(root)
}

ここでは問題ありません。今、私は次のように i18n サポートを追加したかった:

val bundle: ResourceBundle = new PropertyResourceBundle(getClass.getResource("/i18n/en.properties").openStream)
val loader: FXMLLoader = new FXMLLoader(getClass.getResource("/GUI/main.fxml"), bundle)
val root = loader.load[jfxs.Parent]

stage = new PrimaryStage()
{
  title = "FXML Test"
  scene = new Scene(root)
}

現在、コンストラクターscene = new Scene(root)を解決できません。

私はこれを解決しようとしました

1) 次のように、新しい BorderPane を初期化します。

val root = new BorderPane(loader.load[jfxs.Parent])

しかし、BorderPaneのコンストラクターが解決できないので、試してみました

2) 次のように、BorderPane にキャストします。

val root = new BorderPane(loader.load[jfxs.Parent].asInstanceOf[BorderPane])

これは IDE では問題ありませんが、コンパイラ エラーがスローされます。

原因: java.lang.ClassCastException: javafx.scene.layout.BorderPane は scalafx.scene.layout.BorderPane にキャストできません

どうすればこれを解決できますか?

4

1 に答える 1

0

「現在、コンストラクターscene = new Scene(root)を解決できません。」:これは、コンストラクターが ではなくscalafx.scene.Scenetype のパラメーターを予期しているためです。scalafx.scene.Parentjavafx.scene.Parent

インポートに追加import scalafx.Includes._するだけで、ScalaFX の暗黙的な変換を使用できます。その後、次のことができます。

import java.util.PropertyResourceBundle
import javafx.fxml.FXMLLoader
import javafx.{scene => jfxs}

import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene

object MyApp extends JFXApp{
  val bundle = new PropertyResourceBundle(getClass.getResource("/i18n/en.properties").openStream)
  val fxml = getClass.getResource("/GUI/main.fxml")
  val root: jfxs.Parent = FXMLLoader.load(fxml, bundle)

  stage = new PrimaryStage() {
    title = "FXML Test"
    scene = new Scene(root) // root is implicitly converted to scalafx.scene.Parent
  }
}
于 2015-07-31T22:46:16.653 に答える