`

JavaFX学习 EventFilter

阅读更多
   EventFilter可以让你在事件捕捉过程中处理一些东西
public void init(Group root){
		HBox box = new HBox();
		box.setStyle("-fx-background-color:#EEEEEE");
		box.setPrefSize(300, 300);
		box.setOnMousePressed(new EventHandler<MouseEvent>() {

			@Override
			public void handle(MouseEvent arg0) {
				System.out.println("box mouse pressed");
			}
			
		});
		box.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {

			@Override
			public void handle(MouseEvent arg0) {
				System.out.println("box filter");
				//arg0.consume();
			}
			
		});
		Button button = new Button("Click");
		button.setOnMousePressed(new EventHandler<MouseEvent>() {
			@Override
			public void handle(MouseEvent arg0) {
				System.out.println("button mouse pressed");
			}
			
		});
		button.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {

			@Override
			public void handle(MouseEvent arg0) {
				System.out.println("button filter");
			}
			
		});
		box.getChildren().add(button);
		Rectangle rect = new Rectangle();
		rect.setHeight(200);
		rect.setWidth(200);
		rect.setFill(Color.RED);
		
		rect.setOnMousePressed(new EventHandler<MouseEvent>() {
			@Override
			public void handle(MouseEvent arg0) {
				System.out.println("rect mouse pressed");
			}
			
		});
		rect.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {

			@Override
			public void handle(MouseEvent arg0) {
				System.out.println("rect filter");
			}
			
		});
		box.getChildren().add(rect);
		root.setOnMousePressed(new EventHandler<MouseEvent>() {
			@Override
			public void handle(MouseEvent arg0) {
				System.out.println("root mouse pressed");
			}
			
		});
		root.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {

			@Override
			public void handle(MouseEvent arg0) {
				System.out.println("root filter");
				//arg0.consume();
			}
			
		});
		root.getChildren().add(box);
	}

当你点击rectangle的时候,输出:
root filter
box filter
rect filter
rect mouse pressed
box mouse pressed
root mouse pressed
这里可以看到执行的顺序...- root filter- box filter- rect filter - rect Event - box event - root event...
当我点击button时,输出
root filter
box filter
button filter
button mouse pressed
与rectangle不同button event执行后,root event没有执行了,我猜测可能是button event中添加了event.consume()把事件给使用了,从而后面不会传递下去。
当我在rect event添加了event.consume()此时,执行效果和button一样。

从上面例子可以得到,事件的传递执行过程stage filter- scene filter-root filter-subRoot -...-subRoot event- root event-scene event - stage event。
filter执行在event的传递过程中,所以我们可以在event执行前,做我们所需要的操作。
分享到:
评论

相关推荐

    javaFX学习资料集

    本资料集包含了最新的JavaFX学习资源,旨在帮助开发者掌握这一强大的技术,以应对日益增长的跨平台应用需求。 JavaFX的核心特性包括: 1. **丰富的UI组件**:JavaFX提供了一套完整的、易于使用的UI控件,如按钮、...

    JavaFX学习资料总结

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的Java库。它提供了丰富的用户界面组件、强大的图形...通过学习和掌握JavaFX,开发者可以充分利用其丰富的特性,创建出具有吸引力和交互性的应用程序。

    javaFx 学习--之布局菜单

    javaFx 学习--之布局菜单

    javafx学习网站

    ### JavaFX 学习资源与核心知识点概览 #### 一、JavaFX 概述 JavaFX 是一个用于创建丰富客户端应用的平台,它支持创建跨平台的应用程序,包括桌面应用和嵌入式系统。JavaFX 提供了一个强大的场景图 API,允许...

    wxh (JavaFX学习曲线日记

    JavaFX学习曲线日记

    JavaFX教程(学习资料)

    JavaFX教程;JavaFX教程;JavaFX教程JavaFX教程;

    JavaFX学习之样例8

    这个"JavaFX学习之样例8"可能是一个教程或示例集合,用于教授如何使用JavaFX来创建一个特定的图形元素,比如时钟。在这个例子中,我们可能将学习如何利用JavaFX的图形和动画功能来构建一个可交互的模拟时钟。 首先...

    JavaFX学习之Preloader

    JavaFX学习之Preloader JavaFX是一个用于创建桌面和移动应用程序的开源图形用户界面(GUI)工具包,它提供了一套丰富的组件、动画效果以及强大的2D和3D图形支持。在开发大型JavaFX应用程序时,为了提升用户体验,...

    javaFx 学习--入门示例程序的源码

    在"javaFx 学习--入门示例程序的源码"这个压缩包中,包含了一个名为"helloworld"的文件,这通常是一个初学者接触任何编程语言或库时的第一个示例。 HelloWorld 示例是编程领域的基础,它演示了如何在JavaFX中展示...

    javaFx 学习--之Adding Dynamic Behavior(加动态特性源码)

    这通常是学习JavaFX的第一步,通过这个例子,你可以理解如何启动JavaFX应用、创建控件并响应用户操作。 总之,JavaFX的动态行为主要包括事件处理、属性绑定和样式改变等方面。通过熟练掌握这些技术,开发者可以创建...

    javaFx 学习--之组件篇1(边框与布局管理1Label)

    javaFx 学习--之组件篇1(边框与布局管理1Label)

    JAVAFX学习教材(英文)

    JavaFx 的官方入门教材,英文

    javafx脚本语言中文学习文档

    javafx语言中文教程,内附代码,有助于学习理解!

    JavaFX+Jfoenix 学习笔记(一)--环境搭建及多款Hello World演示源码

    在“JavaFX+Jfoenix 学习笔记(一)--环境搭建及多款Hello World演示源码”中,我们将主要探讨以下几个知识点: 1. **JavaFX环境搭建**: - 安装Java Development Kit (JDK):JavaFX不再包含在标准JDK中,因此需要...

    JavaFX学习 自定义分页,工具栏,window

    NULL 博文链接:https://lujin55.iteye.com/blog/1747929

    JavaFx 入门文档,JavaFx实例

    本文将深入探讨JavaFX的基础知识,包括其核心概念、开发环境的搭建、基本组件的使用,以及如何通过实例来学习和掌握JavaFX。 首先,JavaFX的核心概念主要包括场景(Scene)、舞台(Stage)、节点(Nodes)和布局...

    深入学习javaFx脚本语言

    深入学习JavaFX脚本语言,意味着我们将探讨其语法、特性以及如何利用它来构建动态的应用程序。 JavaFX最初引入了一种名为JavaFX Script的专用脚本语言,但后来在JavaFX 2.0中,JavaFX Script被Java API所取代,使得...

    javaFX Demo 模板案例

    如果这个Demo包含图形元素,我们可以学习到如何在JavaFX中绘制和操作2D或3D图形。 媒体支持是JavaFX的另一个亮点,它内置了对音频和视频播放的支持。`javafx.media`包提供了`MediaPlayer`和`MediaView`类,可以轻松...

    javafx-sdk-11.0.2

    2. **示例代码**:可能包含`samples`目录,其中提供了使用JavaFX编写的示例应用程序,帮助开发者理解和学习如何使用JavaFX进行开发。 3. **文档**:SDK可能还包括API文档,通常位于`docs`目录下,这对于查阅JavaFX...

    javafx使用指南-目录版.pdf

    1. 学习曲线陡峭:JavaFX 的学习曲线陡峭,需要一定的编程经验和知识。 2. performance 问题:JavaFX 应用程序的性能可能会受到影响,例如在低配置设备上运行时。 JavaFX 是一个功能强大且灵活的平台,适用于开发...

Global site tag (gtag.js) - Google Analytics