开始使用Scala + JavaFX桌面应用程序开发

Tow*_*wer 17 scala javafx fxml

是否有一些指南或演练来构建Scala + JavaFX桌面应用程序?

我很难找到一个好的来源,我使用IntelliJ IDEA作为IDE.

即使是最简单的桌面问候世界样本也会有很大帮助,因为我几乎无法从哪里开始.

更新:这就是我现在拥有的:

import javafx.application.Application
import javafx.scene.Scene
import javafx.scene.layout.StackPane
import javafx.stage.Stage
import javafx.scene.control.Label

class Test extends Application {
  override def start(primaryStage: Stage) {
    primaryStage.setTitle("Sup!")

    val root = new StackPane
    root.getChildren.add(new Label("Hello world!"))

    primaryStage.setScene(new Scene(root, 300, 300))
    primaryStage.show()
  }
}

object Test {
  def main(args: Array[String]) {
    val t = new Test
    t.start(new Stage)
  }
}
Run Code Online (Sandbox Code Playgroud)

运行它我得到:

线程"main"中的异常java.lang.IllegalStateException:不在FX应用程序线程上; currentThread = main

如何让它显示带有标签的hello world窗口?

Kai*_*ren 30

编写基于Scala的JavaFX应用程序时需要了解一些事项.

首先,这是一个示例hello world应用程序:

import javafx.application.Application
import javafx.scene.Scene
import javafx.scene.layout.StackPane
import javafx.stage.Stage
import javafx.scene.control.Label

class Test extends Application {
  println("Test()")

  override def start(primaryStage: Stage) {
    primaryStage.setTitle("Sup!")

    val root = new StackPane
    root.getChildren.add(new Label("Hello world!"))

    primaryStage.setScene(new Scene(root, 300, 300))
    primaryStage.show()
  }
}

object Test {
  def main(args: Array[String]) {
    Application.launch(classOf[Test], args: _*)
  }
}
Run Code Online (Sandbox Code Playgroud)

运行它你应该得到:

在此输入图像描述

以下是Java中的官方hello world示例:http://docs.oracle.com/javafx/2/get_started/hello_world.htm

主要区别是:

  • 你必须编写所谓的伴随对象,并def main()启动实际的应用程序.
  • 您必须指定它将在类Test的上下文中运行,而不是在伴随对象中运行:Application.launch(classOf[Test], args: _*).

如果您只是尝试直接运行应用程序,Application.launch(args : _*)则会收到此错误:

线程"main"中的异常java.lang.RuntimeException:错误:类Test $不是javafx.application.Application的子类

要了解有关JavaFX的更多信息,请阅读官方文档:http://docs.oracle.com/javafx/index.html