我正在使用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中定义函数。
答案 0 :(得分:0)
Take a look at this tutorial使用Javascript
使用JavaFXpublic 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类型。