Verwenden von fx: id als CSS-ID in FXML

Es scheint, dass in FXML, wenn Sie keine ID (CSS) angeben, standardmäßig der Wert fx: id verwendet wird. Mein bisheriges Verständnis war, dass die beiden völlig disjunkt waren, ID für CSS und nur CSS. fx: id für @FXML-Bindungen im Controller.

Dies kann mit einem kleinen Test demonstriert werden - drei Tasten, erstens mit ID, zweitens mit FX: ID, drittens mit beiden ID-Typen.

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Button id="cssid0" mnemonicParsing="false" text="Button" />
      <Button fx:id="fxid1" mnemonicParsing="false" text="Button" />
      <Button id="cssid2" fx:id="fxid2" mnemonicParsing="false" text="Button" />
   </children>
</VBox>

ie Verwendung von Node.lookup (cssSelector) ermöglicht die Auswahl nach fx: id

@Override
public void start(Stage stage) throws Exception {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("/foo.fxml"));
    Parent p = loader.load();

    System.out.println(p.lookup("#cssid0")); // => Button[id=cssid0, styleClass=button]'Button'
    System.out.println(p.lookup("#fxid1"));  // => Button[id=fxid1, styleClass=button]'Button'

    System.out.println(p.lookup("#fxid2"));  // => null (if there is a CSS ID it takes precedent)
    System.out.println(p.lookup("#cssid2")); // Button[id=cssid2, styleClass=button]'Button'

    stage.setScene(new Scene(p, 200, 200));
    stage.getScene().getStylesheets().add("/foo.css");
    stage.show();
}

Auch CSS erlaubt die Auswahl nach fx: ID

#cssid0 {
    -fx-color: red;
}
#fxid1 {
    -fx-color: green;
}
#cssid2 {
    -fx-color: blue;
}

Dies scheint nicht von der bestehenden Frage abgedeckt zu sein Was ist der Unterschied zwischen fx: id und id: in JavaFX?, Javadoc für Node.getId () oder irgendwo anders, wo ich es finden könnte.

Diese Funktion ist sehr nützlich, da wir nur eine einzige fx: id angeben müssen, die für Controller, CSS und Unit-Tests mit test-FX verwendet werden kann.

Ist es in Ordnung, diesen Ansatz zu verwenden, oder baue ich Annahmen zu undokumentiertem Verhalten auf, das sich in einer späteren Version ändern könnte? Oder ist es irgendwo dokumentiert, wo ich vermisse?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage