从Java调用FXML文档中定义的javascript函数

时间:2014-06-17 06:39:45

标签: java javascript javafx fxml

我正在使用FXML文档来定义JavaFX布局,并且一直在使用Java控制器,但我现在正在FXML文档中直接查看javascript事件处理程序。

我想知道是否有人知道如何从应用程序中调用FXML文档中定义的Javascript函数?

即给出FXML文件F.FXML

<BorderPane>
  <fx:script>
     function something() {}
  </fx:script>
</BorderPane>

由FXMLLoader加载的那些:

FXMLLoader fxml = new FXMLLoader("F.FXML");
BorderPane root = (BorderPane)fxml.load();

可以做相同的:

root.something()

我想解决方法是在幕后使用控制器类做一些魔术,但我还是想在javascript中定义函数。

1 个答案:

答案 0 :(得分:0)

Take a look at this tutorial使用Javascript

使用JavaFX
public class MapApp extends Application {
    public static int ZOOM_STREET = 10;

    public static class City {
        public City(String name) {...}
        ...
    }

    public int currentZipCode;

    public void navigateTo(City location, int zoomLevel) {...}
     ....
}

和javascript:

function navigateTo(cityName) {
   //Assumes that the Ant task uses "myMapApp" as id for this application
   var mapApp = document.getElementById("myMapApp");
   if (mapApp != null) {
       //City is nested class. Therefore classname uses $ char 
       var city = new mapApp.Packages.testapp.MapApp$City(cityName);
       mapApp.navigateTo(city, mapApp.Packages.testapp.MapApp.ZOOM_STREET);
       return mapApp.currentZipCode;
   }
   return "unknown";
}
window.alert("Area zip: " + navigateTo("San Francisco"));

正如教程所解释的那样:

  

[above]中的JavaScript代码段将几个值传递给Java代码[在javascript代码段上方]。在Java代码中使用这些值之前,它们会自动转换为最接近的Java类型。