@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); } } |