@maymie
Для удаления eventhandler в JavaFX вы можете использовать методы removeEventHandler() или removeEventFilter() на объекте узла (Node).
Небольшое отличие между removeEventHandler() и removeEventFilter() заключается в том, что removeEventHandler() удаляет только EventHandler, добавленный с помощью addEventHandler(), в то время как removeEventFilter() удаляет и EventHandler, и EventFilter, добавленные с помощью addEventFilter().
Обратите внимание, что вам нужно использовать тот же самый объект EventHandler/EventFilter, который был добавлен ранее, для успешного удаления.
@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);
}
}
|