2016-11-23 82 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作为关键...