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: