JavaFX Node.lookup () gibt nur für einige mit FXMLLoader geladene Elemente in Parent null zurück.

Ich habe ein übergeordnetes Element aus FXML geladen, es zu einem Bereich innerhalb einer Szene / Bühne hinzugefügt und es angezeigt und anschließend sofort nach Komponenten gesucht. lookup () gibt für einige null zurück, für andere jedoch nicht null. Unter welchen Umständen würde es das tun?

Hier ist der Lade- und Suchcode:

    rootUi = FXMLLoader.load(getClass().getResource("PracticeScreen.fxml"));
    // added to Parent within stage and setVisible(true)
    analysisGroup = (Pane)rootUi.lookup("#analysisGroup");       // null
    stickiesPane = (Pane)rootUi.lookup("#stickiesPane");         // null
    scoreScroll = (ScrollPane)rootUi.lookup("#scoreScrollPane"); // GOOD
    tintLayer = rootUi.lookup("#tintLayer");                     // GOOD
    scoreImageView = (ImageView)rootUi.lookup("#scoreImage");    // null
    StackPane scoreRenderStack = (StackPane)rootUi.lookup("#scoreRenderStack"); // null
    StackPane scoreScrollStack = (StackPane)rootUi.lookup("#scoreScrollStack"); // null

scoreScrollPane wird zurückgegeben, aber dann werden alle untergeordneten Elemente zurückgegeben.

FXML geladen:

  <?import javafx.geometry.Insets?>
  <?import javafx.scene.control.Label?>
  <?import javafx.scene.control.ScrollPane?>
  <?import javafx.scene.control.ToggleButton?>
  <?import javafx.scene.effect.DropShadow?>
  <?import javafx.scene.effect.Glow?>
  <?import javafx.scene.image.ImageView?>
  <?import javafx.scene.layout.*?>
  <?import javafx.scene.shape.Rectangle?>
  <?import javafx.scene.text.Font?>
  <BorderPane style="-fx-background-color: white;" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
     <center>
        <StackPane id="scoreScreenStack" style="-fx-background-color: blue;" BorderPane.alignment="CENTER">
           <children>
              <ScrollPane id="scoreScrollPane" fitToHeight="true" hbarPolicy="ALWAYS" vbarPolicy="NEVER">
                 <content>
                    <StackPane id="scoreScrollStack">
                       <children>
                          <StackPane id="scoreRenderStack" alignment="CENTER_LEFT" StackPane.alignment="CENTER_LEFT">
                             <children>
                                <ImageView id="scoreImage" pickOnBounds="true" preserveRatio="true" StackPane.alignment="CENTER_LEFT" />
                                <Pane id="analysisGroup" />
                                <Pane id="stickiesPane" minHeight="200.0" minWidth="200.0" />
                                <Rectangle id="playbackCursor" arcHeight="5.0" arcWidth="5.0" fill="DODGERBLUE" height="150.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" visible="false" width="2.0">
                                   <effect>
                                      <DropShadow color="DODGERBLUE" />
                                   </effect>
                                </Rectangle>
                             </children>
                          </StackPane>
                       </children>
                    </StackPane>
                 </content>
              </ScrollPane>
              <BorderPane pickOnBounds="false">
                 <top>
                    <StackPane BorderPane.alignment="CENTER">
                       <children>
                          <BorderPane>
                             <left>
                                <Label id="recordingIndicator" text="Listening..." textFill="#00a7ff" BorderPane.alignment="CENTER">
                                   <font>
                                      <Font size="18.0" />
                                   </font>
                                   <effect>
                                      <Glow level="0.86" />
                                   </effect>
                                   <BorderPane.margin>
                                      <Insets />
                                   </BorderPane.margin>
                                   <padding>
                                      <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" />
                                   </padding>
                                </Label>
                             </left>
                             <right>
                                <HBox BorderPane.alignment="CENTER">
                                   <children>
                                      <ToggleButton id="finalPerformance" mnemonicParsing="false" text="Final Performance" />
                                   </children>
                                   <BorderPane.margin>
                                      <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" />
                                   </BorderPane.margin>
                                </HBox>
                             </right>
                          </BorderPane>
                       </children>
                    </StackPane>
                 </top>
              </BorderPane>
              <Pane id="tintLayer" opacity="0.0" pickOnBounds="false" style="-fx-background-color: #00a7ff;" visible="false" />
           </children>
        </StackPane>
     </center>
  </BorderPane>

Antworten auf die Frage(4)

Ihre Antwort auf die Frage