2016-06-29 12 views
0

Ich habe einen Baum wie folgt aus:Wie erhält man Zugriff auf Kinderknoten in javafx?

enter image description here

Wie man dort sehen kann, ist GridPane mit 10 Spalten. Jeder von ihnen enthält BorderPane in AnchorPane gewickelt. Jedes BorderPane besteht aus 2 Labels und 1 RadioButton. Im Folgenden sehen Sie, wie es aussehen:

enter image description here

Ich möchte Sie fragen, wie Zugang von Code auf dieser Seite zu diesen Elementen erhalten. Ich weiß, dass ich getChildren() -Methode auf GridPane verwenden kann, aber dann bekomme ich nur AnchorPanes aus GridPane-Spalten. Ich möchte tief gehen und beispielsweise Text in eines der Labels einfügen.

Ich möchte hinzufügen, dass Set-ID in Scene Builder ist nicht was ich will, weil es viele Spalten und ich werde es in einer Schleife füllen.

Können Sie mir dabei helfen?

Noch eine Sache: Ich baue die Ansicht im Szenen-Generator.

+0

Es ist so einfach, statt zu helfen, statt zu helfen. –

Antwort

0

Sie können set a css id für die Knoten innerhalb Ihrer Schleife zum Zeitpunkt der Erstellung. Sie können später lookup die Knoten nach der ID setzen. A lookup will also work on a scene, um einen Knoten oder einen passenden Satz von Knoten innerhalb der Szene zu finden.

HBox parent = new HBox(); 
for (int i = 0; i < N_COLS, i++) { 
    Node childNode = createNode(); 
    childNode.setId("child" + i); 
    parent.getChildren().add(childNode); 
} 
. . . 
Node redheadedStepchild = parent.lookup("#child5"); 

Natürlich können Sie immer das Kind Zugriff auf die Standard-Objekt-Zugriffs viel zu:

Node redheadedStepchild = parent.getChildren().get(5); 

Wenn die Struktur verschachtelt ist, wie Sie in Ihrer Frage haben, dann können Sie Dinge tun wie zum Beispiel:

Node redheadedGrandchild = grandparent.getChildren().get(3).getChildren().get(5); 

Solche Suchen werden über große Strukturen gewunden und wahrscheinlich am besten als Ihre c vermieden werden Ode würde spröder werden. So würde eine css-basierte Suche oder tree traversal wahrscheinlich bevorzugt sein, oder eine direkte Injektion einer Referenz über eine fx:id und @FXML, die in Ihrem Fall nicht gut funktionieren würde, weil Sie die Elemente in Code in einer Schleife erstellen, daher die Lookup-Methode ist wahrscheinlich am besten für dich.