我正在尝试从 FXML reference 运行以下示例:

这个例子包括在 JavaScript 脚本中声明一个 String 变量,然后在 FXML 中使用 $ 使用它。用于在标签中显示字符串的运算符。

问题是当我用 Java 8u40 运行这个例子时,标签是空的,而不是显示声明的字符串。

JavaFxComponent.java:

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

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> 

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

请您参考如下方法:

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


  • <fx:define> 
         <String fx:id="myText" fx:value="This is the text of my label." />  
    </fx:define> 
    <Label text="$myText" /> 
    

  • <Label fx:id="myLabel" /> 
    <fx:script> 
        myLabel.text = "This is the text of my label."; 
    </fx:script> 
    

  • 注意:第一种方法起作用 <?import java.lang.String?>需要进口。


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!