Применение языка FXML находится в русле традиций использования декларативных языков для описания графических интерфейсов пользователя.
Использование языка FXML заключается в создании FXML-файла, содержащего описание дочерних узлов корневого узла графа сцены, и загрузки его с помощью статического метода load класса FXMLLoader, возвращающего корневой узел графа сцены.
Преимущество такой модели создания графического интерфейса заключается в том, что изменение графа сцены JavaFX-приложения не требует перекомпиляции Java-кода – FXML-описание интерфейса загружается при запуске JavaFX-приложения.
FXML-файл содержит описание корневой JavaFX-панели AnchorPane с дочерними JavaFX-компонентами Button и Label.
Атрибут onAction компонента Button ссылается на метод handleButtonAction, обрабатывающий нажатие кнопки Button, класса Controller, который определен в качестве контроллера атрибутом fx: controller компонента AnchorPane.
Язык FXML поддерживает шаблон проектирования Model-View-Controller (MVC), разделяющий бизнес-логику, представление данных и взаимодействие с пользователем.
В MVC-терминологии FXML-описание является представлением View, модель Model представляет компонент JavaFX Beans, обеспечивающий данные JavaFX-приложения, а контроллером Controller является Java-класс, реализующий код взаимодействия с пользователем и связывания компонента JavaFX Beans с FXML-описанием графического интерфейса JavaFX-приложения.
Для включения такого контроллера в JavaFX-приложение, его необходимо указать в качестве значения атрибута fx: controller FXML-описания.
FXML-контроллер может реализовывать интерфейс Initializable, имеющий единственный метод initialize, вызываемый средой выполнения для инициализации класса FXML-контроллера и используемый, например, для связывания компонента данных JavaFX Beans с FXML-описанием.
Методу initialize, в качестве аргументов, среда выполнения передает URL-адрес FXML-описания графического интерфейса JavaFX-приложения и ResourceBundle-ресурсы JavaFX-приложения.
URL-адрес FXML-описания и ResourceBundle-ресурсы определяются при вызове в главном классе JavaFX-приложения статического метода load класса FXMLLoader.
Файл ResourceBundle-ресурсов решает задачу локализации строк графического интерфейса и передается как ResourceBundle-объект методу load с помощью статического метода getBundle класса java.util.ResourceBundle.
В пакете приложения можно создать файл с расширением. properties, имя которого без расширения, но предваряя именем пакета, нужно указать в аргументе метода ResourceBundle.getBundle.