个性化阅读
专注于IT技术分析

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>() {
			@Override
			public void handle(KeyEvent event) {
				// TODO Auto-generated method stub
				tf2.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类的对象。

赞(0)
未经允许不得转载:srcmini » JavaFX事件过滤器

相关推荐

评论 抢沙发

评论前必须登录!