本文概述
- 将事件过滤器添加到节点
- 删除事件过滤器
【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);
}}
文章图片
删除事件过滤器 当我们不再需要事件过滤器来处理为特定节点处理事件而生成的事件时, 可以使用removeEventFilter()方法删除该过滤器。
方法中传递了两个参数, 第一个是事件类型, 第二个是过滤器, 它是EventHandler类对象。
使用以下语法删除在节点上注册的事件筛选器。
node.removeEventFilter(<
Input-Event>
, filter);
其中, filter是EventHandler类的对象。
推荐阅读
- JavaFX事件处理程序
- JavaFX椭圆
- JavaFX DropShadow效果
- 程序人生|程序员找不到女朋友的原因,脱单看这里!
- java|what(年薪30万的程序员找不到女朋友?)
- [Java]SpringMVC工作原理之二(HandlerMapping和HandlerAdapter)
- android学习-Eclipse中修改Android项目图标
- AndroidAndroid下SQLite3数据库的操作
- Android数据加密之Base64编码算法