如何使用scala制作fxml控制器?

b0zn9rqh  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(233)

我正在尝试创建一个scala程序,它使用javafxscenebuilder为gui生成的fxml文件。尽管https://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm 是java,我用它作为我的示例起点(找不到更好的了。)
如果我使用controller类的java版本,我就能够运行这个示例,如示例所示(可用于java版本或scala版本的类,该类扩展应用程序并在其中包含重写的start方法。)但如果我将此java版本控制器类替换为scala版本,则会出现以下错误:
线程“javafx application thread”java.lang.runtimeexception中的异常:javafx.fxml.fxmloader$methodhandler.invoke(fxmloader)处的java.lang.reflect.invocationtargetexception。java:1774)
以下是intellij在使用菜单项“代码/将java转换为scala”时将java版本控制器(我称之为jcontroller)转换为scala版本(我称之为SCOontroller)的内容:

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")
  }
}

当然,我还将生成的fxml文件中的<gridpane-fx:controller=“jcontroller”更改为<gridpane-fx:controller=“scocontroller”。
我也尝试过修改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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题