【问题标题】:FXML, script tag and initialize methodFXML、脚本标签和初始化方法
【发布时间】:2013-05-13 09:15:52
【问题描述】:

我正在测试和发现 JavaFX。

在JavaFX FXML documentation about controllers 中,据说如果控制器有public void initialize() 方法,则一旦加载FXML 图就会调用它。

是否可以通过脚本方式从 FXML 文件执行类似的操作?我尝试了类似的方法,但根本没有调用 initialize()

<?xml version="1.0" encoding="UTF-8"?>

<?language javascript?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane xmlns:fx="http://javafx.com/fxml">

    <fx:script>
    importClass(java.lang.System);

    function initialize() {
        System.out.println('hello');
    }  
    </fx:script>

    <Button text="Button" />

</AnchorPane>

我错过了什么,还是无法从 FXML 文件中做到这一点?

是否有一种解决方法,以便 FXML 文件可以嵌入一些代码,这些代码将在加载后自动执行(不使用外部 Java 控制器文件)?

【问题讨论】:

    标签: java javascript javafx-2 fxml


    【解决方案1】:

    我认为 fxml 中的脚本将像在 HTML 中一样内联执行。所以你不要将要执行的脚本语句放在任何函数中。

    有关示例,请参阅此fxml+JavaScript metronome application

    【讨论】:

    • 很简单:-) 我将它与在控制器中执行初始化进行了比较:内联脚本甚至在控制器之前执行。
    【解决方案2】:

    控制器还必须实现 javafx.fxml.Initializable 接口。用于调用初始化方法。控制器的代码示例显示了这一点,但描述不是很清楚。

    我不确定 FXML 脚本。

    【讨论】:

    • 好像变了。根据文档docs.oracle.com/javafx/2/api/javafx/fxml/Initializable.html“此接口已被自动注入控制器的位置和资源属性所取代。FXMLLoader 现在将自动调用控制器定义的任何适当注释的无参数初始化()方法。建议尽可能使用注入方法。”
    • 哈,你每天都能学到一些东西。注入方法(与 Initalizable 中的方法具有不同的签名)似乎比接口记录得更少。资源是用@FXML 注释的字段吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多