Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX2JavaScriptAPI-获取java控制器_Java_Javascript_Javafx 2_Fxml - Fatal编程技术网

JavaFX2JavaScriptAPI-获取java控制器

JavaFX2JavaScriptAPI-获取java控制器,java,javascript,javafx-2,fxml,Java,Javascript,Javafx 2,Fxml,我有一个FXML文件,它有很多控制器方法,我把这些方法发送给一个普通的控制器。然而,我最近添加了几个小处理程序,它们可以做一些非常琐碎的事情,我想知道我是否可以在FXML文件本身的javascript中做这些事情。然而,我似乎遇到了一个问题:我找不到一种文档化的方法来获取javascript中的controller对象。如何在javascript中获取控制器对象?(不,我不能使用静态方法,因为我在很多对象上有很多这样的控制器) 使用Java的当前代码: FXML文件: ... <GridP

我有一个FXML文件,它有很多控制器方法,我把这些方法发送给一个普通的控制器。然而,我最近添加了几个小处理程序,它们可以做一些非常琐碎的事情,我想知道我是否可以在FXML文件本身的javascript中做这些事情。然而,我似乎遇到了一个问题:我找不到一种文档化的方法来获取javascript中的controller对象。如何在javascript中获取控制器对象?(不,我不能使用静态方法,因为我在很多对象上有很多这样的控制器)

使用Java的当前代码: FXML文件:

...
<GridPane fx:id="moveOverlay" onMouseClicked="#mouseOverlayClicked" ...>
....
所需的FXML:

...
<fx:script>
var controller = [what goes here?];

function mouseOverlayClicked(e) {
    if (e.getClickCount() > 1) {
        controller.enableNestedEditing();
    else if (e.isControlDown()) {
        controller.selectSelf();
}
</fx:script>
...
<GridPane fx:id="moveOverlay" onMouseClicked="mouseOverlayClicked" ...>
...
。。。
var controller=[这里是什么?];
功能鼠标点击(e){
如果(如getClickCount()>1){
controller.enableNestedEditing();
否则如果(例如isControlDown()){
controller.selectSelf();
}
...
...

java类中没有相应的事件处理程序(除了其他方法)

非常简单,
controller
已经在fxml的javascript部分中定义。因此不需要
var controller=

例如:

<?xml version="1.0" encoding="utf-8"?>

<?language javascript?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>

<VBox xmlns:fx="http://javafx.com/fxml"
      fx:controller="fxmltest.SomeController">
    <fx:script>
        function buttonClicked() {
          controller.print("hallo");
        }
    </fx:script>
    <children>
        <Button text="John Doe" onAction="buttonClicked()"/>
    </children>
</VBox>
结果:


如果是,我找不到。我是通过尝试和错误发现的。
<?xml version="1.0" encoding="utf-8"?>

<?language javascript?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>

<VBox xmlns:fx="http://javafx.com/fxml"
      fx:controller="fxmltest.SomeController">
    <fx:script>
        function buttonClicked() {
          controller.print("hallo");
        }
    </fx:script>
    <children>
        <Button text="John Doe" onAction="buttonClicked()"/>
    </children>
</VBox>
package fxmltest;

import javafx.fxml.FXML;

public class SomeController {

  @FXML
  public void print(String s){
    System.out.println("from javascript: "+s);
  }
}