2016-11-23 9 views
1

ノードからコントローラインスタンスを取得する可能性がありますか?たとえば、タブのAnchorPane?ノードからコントローラインスタンスを取得

私は、私は別のコントローラをロードし、私はすでにロードされている

+0

これはあなたにとって参考になるかもしれません。 [passing-parameters-javafx-fxml](http://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml/40193164#40193164) – CTN

答えて

2

Node sがデフォルトでそれを作成するために使用されるFXMLファイルで使用されているコントローラに関する情報が含まれていないどのコントローラを検証したいと思いますいくつかのAnchorPanesを持っています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> 

あなたがこれを行う場合、あなたは

を使用してこの種の情報を追加したノードに最も近い祖先でコントローラを検索することができます propertiesマップから情報を取得する
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; 
} 

またはから情報を取得するために

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

を使用してプロパティ。

おそらく情報を追加する方法は1つではなく、両方を追加するだけです。また、fooをキーとして置き換える方が良いでしょう...

関連する問題