4

通常のコントローラーに送信する多くのコントローラー メソッドを含む FXML ファイルがあります。しかし、私は最近、非常に些細なことを行ういくつかの小さなハンドラーを追加しており、代わりに FXML ファイル自体の JavaScript でそれらを実行できるかどうか疑問に思っていました。ただし、問題に遭遇したようです: javascript でコントローラー オブジェクトを取得する文書化された方法が見つかりません。javascriptでコントローラーオブジェクトを取得するにはどうすればよいですか? (いいえ、多くのオブジェクトにこれらのコントローラーがたくさんあるため、静的メソッドを使用できません)

Java を使用した現在のコード: FXML ファイル:

...
<GridPane fx:id="moveOverlay" onMouseClicked="#mouseOverlayClicked" ...>
....

そしてJavaコントローラー:

...
@FXML
private void mouseOverlayClicked(MouseEvent e)
{
    if (e.getClickCount() > 1)
    {
        this.enableNestedEditing();
    }
    else if (e.isControlDown())
    {
        this.selectSelf();
    }
}
...

必要な 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" ...>
...

Java クラスに対応するイベント ハンドラはありません (他のメソッドは別として)。

4

1 に答える 1

2

簡単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>

コントローラ:

package fxmltest;

import javafx.fxml.FXML;

public class SomeController {

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

結果:

ここに画像の説明を入力

于 2013-04-22T14:34:28.707 に答える