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

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:

Okno aplikacji
Okno aplikacji po kliknięciu przycisku ‘Tak’