如何使用 Scala 制作 FXML 控制器?

问题描述

我正在尝试创建一个 scala 程序,该程序使用从 JavaFX SceneBuilder 为 GUI 生成的 FXML 文件。尽管 https://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm 是 Java,但我将其用作示例起点。 (找不到更好的了。)

如果我使用控制器类的 Java 版本,我就能运行这个示例,如示例中所示。 (适用于扩展 Application 的类的 Java 版本或 Scala 版本,并在其中包含重写的 start 方法。)但是如果我用 Scala 版本替换这个 Java 版本控制器类,我会收到以下错误

线程“JavaFX 应用程序线程”中的异常 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 在 javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)

当我使用菜单代码/将 Java 转换为 Scala 时,Intellij 将 Java 版本控制器(我称之为 jController)转换为 Scala 版本(我称之为 sController):

import javafx.event.ActionEvent
import javafx.fxml.FXML
import javafx.scene.text._

class sController {
  @FXML private val actiontarget: Text = null

  @FXML protected def handleSubmitButtonAction(event: ActionEvent): Unit = {
    actiontarget.setText("Sign in button pressed")
  }
}

当然我也把

我还尝试修改控制器的 Scala 版本,从上面由 Intellij 生成代码开始,但没有任何效果

如果我更换

@FXML private val actiontarget: Text = null

@FXML private val actiontarget: Text = new Text()

然后它无一例外地运行,但不响应按下的按钮。

我还尝试了示例中显示的 javascript 版本来代替控制器版本,但我对 javascript 一无所知,而且 Intellij 似乎不再提供“JavaScript 和 TypeScript 捆绑插件”到这里:https://www.jetbrains.com/help/idea/2020.3/javascript-specific-guidelines.html#ws_JavaScript_before_you_start 我尝试了不同的 javascript 和 typescript 插件,但没有帮助。

任何想法,或者这篇文章是否正确? https://bugs.openjdk.java.net/browse/JDK-8116127

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)