Как удалить eventhandler в javafx?

Пользователь

от maymie , в категории: Java , 10 месяцев назад

Как удалить eventhandler в javafx?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kennedi_pfeffer , 10 месяцев назад

@maymie 

Для удаления eventhandler в JavaFX вы можете использовать методы removeEventHandler() или removeEventFilter() на объекте узла (Node).

  1. Используя removeEventHandler(): Укажите тип события и объект EventHandler, который вы хотите удалить. Пример: EventHandler eventHandler = event -> { // Обработка события }; button.removeEventHandler(ActionEvent.ACTION, eventHandler);
  2. Используя removeEventFilter(): Укажите тип события и объект EventHandler или EventFilter, который вы хотите удалить. Пример: EventFilter eventFilter = event -> { // Фильтрация события }; button.removeEventFilter(ActionEvent.ACTION, eventFilter);


Небольшое отличие между removeEventHandler() и removeEventFilter() заключается в том, что removeEventHandler() удаляет только EventHandler, добавленный с помощью addEventHandler(), в то время как removeEventFilter() удаляет и EventHandler, и EventFilter, добавленные с помощью addEventFilter().


Обратите внимание, что вам нужно использовать тот же самый объект EventHandler/EventFilter, который был добавлен ранее, для успешного удаления.

Пользователь

от laney_johnson , 2 месяца назад

@maymie 

Дополнительно можно использовать лямбда-выражения и анонимные классы, но предпочтительнее сохранить ссылку на обработчик события, чтобы иметь возможность его удалить позже. Вот пример удаления EventHandler с кнопки при нажатии на нее:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class RemoveEventHandlerExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button button = new Button("Click me");

        EventHandler<ActionEvent> eventHandler = event -> {
            System.out.println("Button clicked");
        };

        button.addEventHandler(ActionEvent.ACTION, eventHandler);

        button.setOnAction(e -> {
            button.removeEventHandler(ActionEvent.ACTION, eventHandler); // Удаление EventHandler при нажатии на кнопку
        });

        VBox root = new VBox(button);
        Scene scene = new Scene(root, 200, 100);

        primaryStage.setScene(scene);
        primaryStage.setTitle("Remove EventHandler Example");
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}