JavaFX事件过滤器

本文概述

  • 将事件过滤器添加到节点
  • 删除事件过滤器
事件过滤器提供了处理键盘操作, 鼠标操作, 滚动操作以及更多事件源生成的事件的方法。
【JavaFX事件过滤器】事件过滤器在事件处理的事件捕获阶段处理事件。需要向节点注册事件过滤器, 以便为节点上生成的事件提供事件处理逻辑。但是, JavaFX使我们能够为多个节点和多种事件类型注册一个事件过滤器。
事件过滤器提供EventHandler接口的实现。接口的handle()方法提供了将在生成事件时执行的代码。
将事件过滤器添加到节点 要为节点注册事件过滤器, 请使用方法addEventFilter()。此方法有两个参数, 第一个参数是生成的事件的类型, 第二个参数是过滤器, 它将具有处理事件的代码。
添加事件过滤器的语法如下。
node.addEventFilter (< Event_Type> , new EventHandler< Event-Type> (){ public void handle(Event-Type){ //Actual logic });

可以为多个事件类型定义一个事件过滤器。

以下示例说明了将事件过滤器用于节点的工作。
package application; import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.input.KeyEvent; import javafx.scene.paint.Color; import javafx.stage.Stage; public class JavaFX_EventFilter extends Application{ @Override public void start(Stage primaryStage) throws Exception {// TODO Auto-generated method stub//Adding Labels and TextFileds to the scene Label l1 = new Label("Press Any Key "); Label l2 = new Label("Filtering Event "); l1.setTranslateX(100); l1.setTranslateY(100); l2.setTranslateX(100); l2.setTranslateY(150); TextField tf1 = new TextField(); TextField tf2 = new TextField(); tf1.setTranslateX(250); tf1.setTranslateY(100); tf2.setTranslateX(250); tf2.setTranslateY(150); //Creating EventHandler Object EventHandler< KeyEvent> filter = new EventHandler< KeyEvent> () {@Overridepublic void handle(KeyEvent event) {// TODO Auto-generated method stubtf2.setText("Event : "+event.getEventType()); tf1.setText(event.getText()); event.consume(); }}; //Registering Event Filter for the event generated on text field tf1.addEventFilter(KeyEvent.ANY, filter ); //Setting Group and Scene Group root = new Group(); root.getChildren().addAll(l1, l2, tf1, tf2); Scene scene = new Scene(root, 500, 300, Color.WHEAT); primaryStage.setScene(scene); primaryStage.setTitle("Adding Event Filter"); primaryStage.show(); } public static void main(String[] args) {launch(args); }}

JavaFX事件过滤器

文章图片
删除事件过滤器 当我们不再需要事件过滤器来处理为特定节点处理事件而生成的事件时, 可以使用removeEventFilter()方法删除该过滤器。
方法中传递了两个参数, 第一个是事件类型, 第二个是过滤器, 它是EventHandler类对象。
使用以下语法删除在节点上注册的事件筛选器。
node.removeEventFilter(< Input-Event> , filter);

其中, filter是EventHandler类的对象。

    推荐阅读