javascript - 如何从 javaFX 的 fxml 内部的 JavaScript 调用 java 方法

标签 javascript java javafx fxml

我正在尝试找到一种方法来从 sceneController 外部和 fxml 内部调用 sceneController 中的方法,而无需使用按钮或必须执行的操作才能激活。我希望它在每次应用程序启动时运行一次。所以目前,每次程序启动时,它都会创建一个覆盖整个屏幕的 ImageView 。但是程序打开的每个人都希望出现文件夹中的随机图像。现在 imageView 有一个 fx:id,我在场景 Controller 内的一个方法中使用它来设置图像。场景 Controller 中的方法完美运行。但是问题是我希望图像在程序启动时随机生成,而不是在您按下按钮时(当前发生的情况)。控制 imageView 的方法必须在场景 Controller 内部,不能从场景 Controller 外部调用,因为它没有构造函数(试图创建一个但它导致了问题)。因为您可以从 fxml 内部调用方法(什么按钮和什么不可以)我正在尝试调用该方法来使用 JavaScript 从 fxml 文件内部设置图像,因为看起来您可以那样做。我只是想知道是否有人知道这个问题的更好解决方案。或者更好的是知道如何从 fxml 文件中的 JavaScript 内部调用 java 方法。

所以我正在使用 JavaFX 为我尝试构建的程序构建 GUI,我有点菜鸟。现在,在我开始构建程序的业务端之前,我正试图获得一个美观且可用的 GUI。我正在使用 eclipse 4.6 和 Java 8。

<VBox xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.initSceneController" >

        <fx:script>
            var executeOnce = false;

            if(executeOnce === false) {
                #setBackground;
                executeOnce = true;
            }

            else {
            }


        </fx:script>

所以我希望 fxml 文件中的这段代码实际上会在 sceneHandeler 中调用一个名为 setBackground 的方法,但它只是给我错误:

<eval>:5:5 Expected an operand but found error
                #setBackground;
                ^ in <eval> at line number 5 at column number 5

最佳答案

这并不完全符合您的要求,但您可能应该在 Controller 中声明一个 initialize() 方法。如果存在这样的方法,FXMLLoader将在 Controller 初始化时执行它。这样,您就不需要任何 JavaScript。

public void initialize() {
    // choose your random image here
    // imageView.setImage(...);
}

如果你想保持方法私有(private)/ protected ,你必须用@FXML 注释它。

另见 Controllers Introduction to FXML 中的部分指导。

注意:使用构造函数而不是 initialize() 的问题可能是,在构造时,字段(例如您的 ImageView)尚未初始化/注入(inject)(意味着它们 null),所以你不能使用它们。

关于javascript - 如何从 javaFX 的 fxml 内部的 JavaScript 调用 java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57368108/

相关文章:

Javafx 获取 Ping 结果

带有进度指示器的 JavaFX 线程不旋转,在非 FXThread 中完成的工作

javascript - 我需要使用 javascript 去除斜体的 <em> 元素。查看代码

javascript - CSS 选择器和边框问题

java - 如何在JavaFx中动态删除节点

java - 从实时转换到 firestore 加载数据并在 TextView 中显示

java - 将二维矩阵转换为列的字符串数组(java)

javascript - 监听 webView.loadurl

javascript - 修改单页滚动功能 - 重叠而不是向上滑动

java - 在 Eclipse 中对齐多行 Java 字符串