FXML tutorial (13) – tworzenie obiektów (6)
Znaczniki <fx:define>
i <fx:reference>
Znacznik <fx:define>
jest używany do tworzenia obiektów istniejących poza hierarchią elementów, do których musimy się odwoływać.
Jeżeli mamy utworzony element i chcemy utworzyć do niego referencję stosujemy atrybut – znak $
oznacza referencję do obiektu – albo używamy znacznika <fx:reference>
.
Poniżej dwa przykłady.
Przykład 1
Plik listing13_fxreference_fxdefine.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="/resources/kwiatek.jpg" fx:id="kwiatek" /> </fx:define> <ImageView> <image> <fx:reference source="kwiatek" /> </image> </ImageView> </VBox>
Klasa Listing13_fxreference_fxdefine.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 Listing13_fxreference_fxdefine 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/listing13_fxreference_fxdefine.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 klasy zobaczymy:
Przykład 2
Plik listing13q_fxreference_fxdefine.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="/resources/kwiatek.jpg" fx:id="kwiatek" /> </fx:define> <ImageView image="$kwiatek" /> </VBox>
Klasa Listing13a_fxreference_fxdefine.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 Listing13a_fxreference_fxdefine 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/listing13a_fxreference_fxdefine.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 klasy zobaczymy: