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

FXML tutorial (11) – tworzenie obiektów (4)

Użycie <fx:include>

Do scenografu opisanego w danym pliku FXML możemy dołączyć węzeł FXML opisany w innym pliku FXML. Czynimy to używając znacznika <fx:include>.
Atrybut source określa ścieżkę do pliku. Jeżeli ścieżka zaczyna się od / adres podany jest względem ścieżki klas. Jeżeli tego znaku nie ma adres podany jest względem bieżącego dokumentu.
W znaczniku możemy też podać informację o danych związanych (resource bundle), służących do tworzenia wersji zlokalizowanych. Możemy również podać kodowanie używając atrybutu charset="utf-8".

Plik but11.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<Button text="Anuluj" />

W pliku mamy informacje dotyczące przycisku o treści ‘Anuluj;.

Plik listing11_fxinclude.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>

<VBox xmlns:fx="http://javafx.com/fxml">
	<Label fx:id="lab1" text="Twoja decyzja?" />
	<HBox fx:id="hbox">
		<Button fx:id="but1" text="Tak" />
		<Button fx:id="but2" text="Nie" />
		<fx:include source="but11.fxml" />
	</HBox>

</VBox>
Klasa Listing11_fxinclude.java

Klasa uruchamiająca.

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 Listing11_fxinclude 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/listing11_fxinclude.fxml");
            VBox root = fxmlUrl != null ? FXMLLoader.load(fxmlUrl) : new VBox();
            Scene scene = new Scene(root, 150, 80);
            stage.setScene(scene);
            stage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Po uruchomieniu klasy zobaczymy:

Widok po uruchomieniu klasy
Widok po uruchomieniu klasy