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

FXML tutorial (15) – tworzenie obiektów (8)

Znacznik <fx:root>

Znacznik <fx:root> tworzy element, który zostanie wczytany do aplikacji jako element root, o ile może być takim elementem.
Istnieje sporo możliwości utworzenie zarówno elementu jak i zapewnienia stosownego kontrolera. Inne rozwiązania niż pokazane poniżej są omówione w dokumentacji FXML.

Klasa ButtonController.java

Klasa kontrolera

package codes;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;

public class ButtonController extends VBox {
    @FXML
    private HBox hbox;
    @FXML
    private Label lab1;
    @FXML
    private Button but1;
    @FXML
    private Button but2;
    @FXML
    private Button but3;

    public ButtonController() {
    }

    @FXML
    private void initialize() {
    }

    @FXML
    private void showText1() {
        lab1.setText("Wybrałeś 'Tak'");
    }

    @FXML
    private void showText2() {
        lab1.setText("Wybrałeś 'Nie'");
    }

    @FXML
    private void showText3() {
        lab1.setText("Wybrałeś 'Anuluj'");
    }
}
Plik listing15_fxroot.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?>

<fx:root type="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:root>

W tym pliku element onAction zostaną wyświetlone na czerwono przez analizator składni. Dzieje się tak ponieważ kontroler jest wczytywany z klasy uruchamiającej, a nie z kodu FXML. Kod uruchomi się prawidłowo.

Klasa Listing15_fxroot

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 Listing15_fxroot 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/listing15_fxroot.fxml");
            FXMLLoader loader = new FXMLLoader(fxmlUrl);
            VBox root = new ButtonController();
            loader.setRoot(root);
            loader.setController(root);
            loader.load();
            Scene scene = new Scene(root, 150, 80);
            stage.setScene(scene);
            stage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Po uruchomieniu zobaczyny:

Widok po uruchomieniu aplikacji
Widok po uruchomieniu aplikacji