2016-11-23 73 views
1

有可能從節點獲取控制器實例?例如AnchorPane Tab?從節點獲取控制器實例

我有一些AnchorPanes,我加載不同的控制器和我想驗證其控制器已加載

+0

可能是這對你有幫助。 [通過參數-JavaFX的FXML](http://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml/40193164#40193164) – CTN

回答

2

Node■不要包含關於如何使用默認情況下用於創建它的FXML文件所使用的控制器的任何信息,因爲fxml只是創建場景的一種方式。但是你可以在FXML這樣的附加信息的userData/properties

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:id="AnchorPane" prefHeight="400.0" prefWidth="600.0" onMouseClicked="#click" fx:controller="fxml.FXMLController"> 
    <!-- store controller as userData property --> 
    <userData> 
     <fx:reference source="controller" /> 
    </userData> 
    <properties> 
     <!-- store controller at key "foo" in properties map --> 
     <foo><fx:reference source="controller" /></foo> 
    </properties> 
</AnchorPane> 

如果你這樣做,你可以使用查找在您添加此類信息的節點的最近的祖先控制器

public static Object getController(Node node) { 
    Object controller = null; 
    do { 
     controller = node.getProperties().get("foo"); 
     node = node.getParent(); 
    } while (controller == null && node != null); 
    return controller; 
} 

來檢索properties地圖信息或使用

public static Object getController(Node node) { 
    Object controller = null; 
    do { 
     controller = node.getUserData(); 
     node = node.getParent(); 
    } while (controller == null && node != null); 
    return controller; 
} 

檢索來自的信息財產。

你可能應該只使用一種方法來添加信息,而不是兩者。另外它會更好地代替foo作爲關鍵...