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>