JavaFX z Arią - powrót do strony głównej

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:

Widok po uruchomieniu aplikacji
Widok po uruchomieniu aplikacji

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:

Widok po uruchomieniu aplikacji
Widok po uruchomieniu aplikacji