Использование fx: id в качестве CSS-идентификатора в FXML
Похоже, что в FXML, если вы не укажете идентификатор (CSS), то значение fx: id используется по умолчанию. Моим предыдущим пониманием было то, что эти два понятия были полностью разделены: ID для CSS и только CSS. fx: id для привязок @FXML в контроллере.
Это можно продемонстрировать с помощью небольшого теста - три кнопки, первая с идентификатором, вторая с FX: ID, третья с обоими типами идентификатора.
<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>
Использование Node.lookup (cssSelector) позволяет выбирать по 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();
}
Также CSS позволяет выбирать по fx: ID
#cssid0 {
-fx-color: red;
}
#fxid1 {
-fx-color: green;
}
#cssid2 {
-fx-color: blue;
}
Это, кажется, не покрыто существующим вопросомВ чем разница между fx: id и id: в JavaFX?Javadoc дляNode.getId () или где-нибудь еще, я мог найти.
Эта функция действительно полезна, поскольку нам нужно только указать только один fx: id, который можно использовать для контроллеров, CSS и модульного тестирования с использованием test-FX.
Можно ли использовать этот подход или я строю предположения о недокументированном поведении, которые могут измениться в более позднем выпуске? Или это где-то задокументировано, что я скучаю?