2015-07-21 45 views
7

我試圖從FXML reference運行下面的示例:的JavaScript腳本

這個例子在於,宣佈在JavaScript腳本中的字符串變量,並與運營商$以後使用它在FXML顯示標籤中的字符串。

問題是,當我用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(); 
    } 
} 

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

回答

3

看來, 「var myText」 不創建的範圍參考'$'執行查找。這可能不是您尋找的答案,但我相信爲那些偶然發現同樣問題的人提供替代方案會很有幫助,至少在問題得到解決之前或者有人對此事進行了更多闡述之前。


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

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

注:第1種方法工作<?import java.lang.String?>需從國外進口。

+0

感謝您的回答,我可以使用第二種方法作爲解決方法。 –