2013-04-22 31 views
4

我有一個FXML文件,有很多控制器方法,我發送到一個正常的控制器。然而,我最近添加了幾個小處理程序,它們做的事情非常簡單,並且想知道我是否可以在FXML文件本身中使用JavaScript來處理它們。但是,我似乎遇到了一個問題:我無法找到一個記錄的方式來獲取JavaScript中的控制器對象。我怎樣才能獲得在JavaScript的控制器對象? (不,我不能用靜態的方法,因爲我有很多這樣的控制器在對大量的對象)javafx 2 JavaScript的API - 獲取Java控制器

目前代碼使用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" ...> 
... 

,並沒有相應的事件句柄r(除了其他方法)

回答

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

結果:

enter image description here

+0

阿優!這有記錄嗎? – byteit101 2013-04-23 20:55:54

+0

如果是這樣,我找不到它。我通過試驗和錯誤發現了這一點。 – Sebastian 2013-04-24 10:20:27