FXML tutorial (3) – skrypty
Jeżeli chcemy pominąć kontroler, uchwyty zdarzeń może napisać w języku skryptowym. Skrypty mogą być umieszczone w pliku FXML albo w pliku zewnętrznym.
Skrypty (lub informacja o źródle kodu) są umieszczane w znaczniku/elemencie <fx:script>.
Kod umieszczony w znaczniku może być napisany w dowolnym języku skryptowym dla JVM, na przykład JavaScript (Rhino, Nashorn), Groovy, Closure itp. Ja wykorzystuję tutaj język Groovy.
A oto nasze klasy.
Listing05_fxscript.java
Jest to klasyczna 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 Listing05_fxscript 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/listing05_fxscript.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(); } } }
listing05_fxscript.fxml
<?xml version="1.0" encoding="UTF-8"?> <?language groovy?> <?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" onAction="showText1();" /> <Button fx:id="but2" text="Nie" onAction="showText2()" /> <Button fx:id="but3" text="Anuluj" onAction="showText3()" /> </HBox> <fx:script> def showText1() { lab1.setText("Wybrałeś 'Tak'") } def showText2() { lab1.setText("Wybrałeś 'Nie'") } def showText3() { lab1.setText("Wybrałeś 'Anuluj'") } </fx:script> </VBox>
Warto zwrócić uwagę na instrukcję przetwarzania <?language groovy?>
.
Znacznik <fx:script>
tutaj umieszczony w elemencie VBox
mógłby być również umieszczony w elemencie HBox
, czyli w elemencie, który się do nskryptu odwołuje.
Liczba elementów <fx:script>
nie jest ograniczona.
Zaletą układu z językiem skryptowym jest pozbycie się pliku kontrolera.
Po uruchomieniu klasy i kliknięciu przycisku zobaczymy odpowiedni napis: