FXML中的JavaScript脚本

Rom*_*eau 7 javafx javafx-8

我试图从FXML 参考运行以下示例:

这个例子包括在JavaScript脚本中声明一个String变量,然后在FXML中使用它与$运算符一起在Label中显示String.

问题是当我用Java 8u40运行这个例子时,Label是空的而不是显示声明的String.

JavaFxComponent.java:

public class JavaFxComponent extends VBox {
    public JavaFxComponent() throws Exception {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/JavaFxComponent.fxml"));
        fxmlLoader.setRoot(this);
        fxmlLoader.load();
    }
}
Run Code Online (Sandbox Code Playgroud)

JavaFxComponent.fxml:

<?xml version="1.0" encoding="UTF-8"?>
<?language javascript?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<fx:root type="javafx.scene.layout.VBox" xmlns="http://javafx.com/javafx/8"
    xmlns:fx="http://javafx.com/fxml">
    <fx:script>
        var myText = "This is the text of my label.";
    </fx:script>
    <Label text="$myText" />
</fx:root>
Run Code Online (Sandbox Code Playgroud)

JavaFxTest:

public class JavaFxTest extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setScene(new Scene(new JavaFxComponent()));
        primaryStage.show();
    }

    public static final void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

Alm*_*asB 3

看来“ var myText”并没有在“”执行查找的范围内创建引用$。这可能不是您正在寻找的答案,但是我相信,对于那些偶然发现同一问题的人来说,提及替代方案是有用的,至少在这个问题得到解决或有人对此事有更多了解之前是这样。


  1. <fx:define>
         <String fx:id="myText" fx:value="This is the text of my label." /> 
    </fx:define>
    <Label text="$myText" />
    
    Run Code Online (Sandbox Code Playgroud)

  2. <Label fx:id="myLabel" />
    <fx:script>
        myLabel.text = "This is the text of my label.";
    </fx:script>
    
    Run Code Online (Sandbox Code Playgroud)

<?import java.lang.String?>注意:第一种方法需要导入才能工作。