Скрипты в FXML

Последнее обновление: 13.06.2018

Для создания сложной, которая используется для обработки событий элементов управления, лучше определять классы контроллеров, как было показано в прошлой теме. Однако в каких-то простых случаях можно несколько упростить организацию приложения и определить обработчики прямо в FXML, не создавая отдельного класса контроллера.

Например, определим в FXML следующий интерфейс:

<?xml version="1.0" encoding="UTF-8"?>
<?language JavaScript?>

<?import java.lang.*?>
<?import javafx.scene.Group?>
<?import javafx.scene.control.Button?>

<Group fx:id="root" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/fxml/2.2">
    <Button text="Click!" onAction="pressButton()" fx:id="btn" prefWidth="60"  />
	<fx:script>
	var x = 0;
	function pressButton()
	{
		x++;
		btn.setText(x)
	}
	</fx:script>
</Group>

Фактически такой способ работы с FXML напоминает работу с веб-страницей, которая содержит код javascript. И чтобы в FXML это тоже было возможно, вначало файла помещается следующая декларация:

<?language JavaScript?>

Но чтобы элемент language стал доступен, в корневом узле подключается пространство имен xmlns="http://javafx.com/fxml/2.2". Причем данное пространство имен указывается для атрибута xmlns, поэтому к его возможностям можно обращаться без префикса.

В конце файла определяется элемент fx:script, который содержит логику обработки. Здесь определяются переменная x, которая хранит счетчик нажатий, и функция pressButton, которая будет вызываться при нажатии на кнопку.

В скрипте мы можем обращаться к элементам FXML по их id и соответственно вызывать их методы. Как в случае с кнопкой устанавливается ее текст.

Для прикрепления функции pressButton в качестве обработчика события к кнопке, вызов этой функции присваивается атрибуту onAction:

onAction="pressButton()" 

Стоит обратить внимание, что это отличается от установки ссылки на метод контроллера. То есть в данном случае перед именем функции не ставится знак решетки и после имени идут скобки, которые представляют вызов функции.

При запуске приложения мы сможем нажимать на кнопку и тем самым увеличивать счетчик нажатий:

JavaScript in FXML
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850