FXML tutorial (16) – prefiksy @ i $
Prefiks @
(at) oznacza, że to, co następuje po tym znaku jest położeniem (adresem) ustalonym względem pliku FXML zawierającego ten znak, a nie zwykłym łańcuchem znaków, który też może określać położenie.
Prefiks $
identyfikuje to co po nim następuje jako zmienną.
Prefiks %
może też pomagać w odróżnianiu zasobów związanych przy internalizacji (FXML tutorial (17)), a jako %20
może zastępować znak spacji w adresach URL (FXML tutorial (18)).
Prefiks ${}
po którym następuje kod w klamrach – służy przy wiązaniu wyrażeń (FXML tutorial (19)).
Przykład 1
Plik listing16a_at.fxml
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.layout.VBox?> <?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> <VBox xmlns:fx="http://javafx.com/fxml"> <fx:define> <Image url="@kwiatek.jpg" fx:id="kwiatek" /> </fx:define> <ImageView> <image> <fx:reference source="kwiatek" /> </image> </ImageView> </VBox>
Klasa Listing16a_at.java
package codes; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.stage.Stage; import java.net.URL; public class Listing16a_at extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { try { URL fxmlUrl = this.getClass().getClassLoader() .getResource("resources/listing16a_at.fxml"); VBox root = fxmlUrl != null ? FXMLLoader.load(fxmlUrl) : new VBox(); Scene scene = new Scene(root, 300, 250); stage.setScene(scene); stage.show(); } catch (Exception e) { e.printStackTrace(); } } }
Po uruchomieniu na konsoli zobaczymy:
Przykład 2
Plik listing16b_at
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.layout.VBox?> <?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> <VBox xmlns:fx="http://javafx.com/fxml"> <fx:define> <Image url="@kwiatek.jpg" fx:id="kwiatek" /> </fx:define> <ImageView image="$kwiatek" /> </VBox>
Klasa Listing16b_at.java
package codes; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.stage.Stage; import java.net.URL; public class Listing16b_at extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { try { URL fxmlUrl = this.getClass().getClassLoader() .getResource("resources/listing16b_at.fxml"); VBox root = fxmlUrl != null ? FXMLLoader.load(fxmlUrl) : new VBox(); Scene scene = new Scene(root, 300, 250); stage.setScene(scene); stage.show(); } catch (Exception e) { e.printStackTrace(); } } }
Po uruchomieniu na konsoli zobaczymy: