Взаимодействие с пользователем и обработка событий

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

Для взаимодействия с пользователем в JavaFX используется событийная модель. В этой модели есь источник события - некоторый элемент управления, который генерирует событие, и есть один или несколько слушаетелей или обработчиков события, которые подписываются на событие. Когда элемент управления генерирует событие, то обработчик обрабатывает это событие.

Рассмотрим небольшой базовый пример по обработке событий:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.control.Button;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;

public class Main extends Application{
	
	public static void main(String[] args) {
        
		launch(args);
    }
	
	@Override
    public void start(Stage stage) {
		
		Button btn = new Button();
        btn.setText("Click!");
		
		btn.setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent event) {
			
				btn.setText("You've clicked!");
            }
        });
		
		Group root = new Group(btn);
		Scene scene = new Scene(root);
		stage.setScene(scene);
		
        stage.setTitle("Hello JavaFX");
		stage.setWidth(250);
		stage.setHeight(200);
		
        stage.show();
	}
}

Здесь мы создаем кнопку, которая представлена объектом классом Button. При нажатии на кнопку возникает событие нажатия, которое мы можем обработать.

Базовым классом для всех событий является класс javafx.event.Event, который унаследован от класса java.util.EventObject. При генерации событии, например, при нажатии на кнопку, создается объект Event, через который передается информация о событии. В данном случае при нажатии на кнопку будет генерироваться событие типа javafx.event.ActionEvent (который наследуется от Event).

Для определения обработчика события используется функциональный интерфейс EventHandler.

public interface EventHandler<T extends Event>{
	void handle​(T event);
}

Интерфейс EventHandler типизируется типом, который унаследован от класса Event и который по сути представляет событие. В нашем случае это класс ActionEvent.

Для прикрепления обработчика события EventHandler к событию элемента управления применяется метод btn.setOnAction(), в который передается реализация интерфейса EventHandler. В методе handle определяются действия, которые будут вызываться при нажатии на кнопку:

btn.setOnAction(new EventHandler<ActionEvent>() {
            
	@Override
	public void handle(ActionEvent event) {
			
		btn.setText("You've clicked!");
	}
});

В самом обработчике просто меняется текст кнопки.

Обработка событий в JavaFX

Нередко вместо определения явной реализации интерфейса EventHandler применяются лямбда-выражения. Например, мы могли бы переписать метод btn.setOnAction() следуюшим образом:

btn.setOnAction(e -> {
       
	btn.setText("You've clicked!");
});
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850