JAVAFX-事件

事件传递过程

    1、对象选择

       2、线路构建

       3、事件捕获

       4、事件冒泡

对象选择

      当动作发生时,系统判断哪个节点是对象的规则为:

        键盘事件,拥有焦点的节点为对象

        鼠标事件,光标所处的节点为对象

        触摸屏连续的手势事件,手势开始时,所有触点中心的节点为对象;对于间接触摸屏,对象是光标存在的节点。

    如果超过一个节点处于光标或触点,最上方的节点被认为是对象

    当一个鼠标按键被压下并且对象已选定,所有随后的鼠标事件被传递到这个对象,至到按钮被释放。

事件捕获阶段

        在事件捕获阶段,事件传递从根节点到目标节点。

        如果链中的任何节点被注册了当前事件类型的过滤器,过滤器会被调用。过滤器执行完成后,事件传递到链的下一个节点。

事件冒泡阶段

      当事件对象到达,并且所有注册的过滤器被执行后,事件从对象节点返回到根节点。

        如果链中的任何节点被注册了当前事件类型的处理器,处理器会被调用。处理器执行完成后,事件返回到前一个节点


事件处理

      过滤器与处理器最大的区别在于什么时候被执行。

事件过滤器

      事件过滤器允许你在事件捕获阶段处理事件。一个节点可以有一个或多个过滤器去处理一个事件。一个过滤器可以被多个节点多个事件类型使用。过滤器允许父节点提供公共方法给他的子节点,或者拦截事件并且防止子节点运行此事件。

事件处理器

消费事件


Draggable Panels Example

(address: http://docs.oracle.com/javase/8/javafx/sample-apps/DraggablePanelsExample.zip)

这个例子展示了filter的如下应用:

        * 注册一个超类事件的filter,提供通用功能给子类事件

        * 消费一个事件,以防止子节点触发动作

(http://docs.oracle.com/javase/8/javafx/events-tutorial/img/initial_panels_screen.png)展示了这个例子启动后的界面。用户界面由3个panel组成。每一个panel包含不同的UI控件。在界面的底部是一个可选按钮,控制是否这些panel能够被拖拽。

如果可选按钮(是否拖拽)没有被选中,点击这些panel上的任何控件都会生成一个响应。如果可选按键(是否拖拽)被选中,这些个体的控件不再响应鼠标点击。而替换为,panel的任何位置并得以拖动整个panel,允许你变动panel的位置。

Filters for the Draggable Panels Example

在这个例子里,makeDraggable()方法用来生成三个可以移动的panel。每个panel定义并注册了如下事件的filter:

        * MouseEvent.ANY。panel的这个filter处理所有鼠标事件。如果可选按钮(是否拖拽)被选择,filter消费此事件,所以子节点不会收到事件信息。

        * MouseEvent.MOUSE_PRESSED。panel的这个filter只处理鼠标按下事件

        * MouseEvent.MOUSE_DRAGGED。panel的这个filter只处理鼠标拖动事件

注意观察,每个panel注册了三个filter。特定事件的filter会在超类事件的filter前执行,所以MouseEvent.MOUSE_PRESSED和MouseEvent.MOUSE_DRAGGED会在MouseEvent.ANY前执行。

4、Working with Event Handlers

这个主题描述了JavaFX应用的事件handler。
事件handler让你在事件冒泡阶段处理事件。一个节点针对一个事件可以拥有多个handler。一个handler可以被用于多个事件类型。如果子节点的事件handler没有消费事件,父节点的会在子节点后继续处理。

Registering and Removing an Event Handler

事件handler实现了EventHandler接口。通过注册手段将节点和事件联系起来,方法handle()执行动作。
使用方法addEventHandler()注册handler,事件类型和handler对象作为参数。
当你不再想要节点某个事件类型的handler,使用removeEventHandler()移除handler。
注意,我们也可以设置null对约定的方法,来移除被注册的事件handler。比如:nodel.setOnMouseDragged(null)

Using Event Handlers

事件handler通常被用在叶子节点或者枝节点。比如用在枝节点为所有子节点定义好一个默认响应。
例子:(address: http://docs.oracle.com/javase/8/javafx/sample-apps/KeyboardExample.zip)

KeyBoard Example

这个例子展示了handler的如下使用:
        * 注册一个handler给两个不同的事件类型
        * 父节点提供通用事件处理过程给子节点
这个UI由4个子母组成,都在自己的方块里,代表相符的键盘键。每一个键在屏幕上高亮,指示它被关注。使用左、右箭头键移动焦点到屏幕上不同的键。
当回车键被按下,屏幕上的焦点键变成红色。当回车键弹起,屏幕上的键变回原来的颜色。

Handlers for the Keyboard Example

5、Working with Events from Touch-Enabled Devices

6、Working with Touch Events

JavaFX是一个用于构建桌面应用的Java库,其中事件处理是用户界面交互的关键部分。对于几何图形计算器这样的应用,我们通常会使用图形用户界面(GUI)元素如按钮、文本框和图形区域来获取用户输入,并通过监听这些元素的事件来执行相应的计算。 在JavaFX中,事件处理涉及到以下几个步骤: 1. **添加事件监听器**:在JavaFX中的`javafx.scene.control`包中,有许多事件接口,如`ActionEvent`, `MouseEvent`等。你可以为按钮或其他图形元素设置事件监听器,如`EventHandler<ActionEvent>`,当用户点击或执行某个动作时,这个监听器会被触发。 2. **处理事件**:在事件监听器的匿名内部类或lambda表达式中,编写处理事件的方法。例如,如果你正在创建一个矩形并需要计算其面积,可以在`onAction`方法中获取用户的输入,如矩形的长和宽,然后计算面积并更新显示结果。 3. **图形绘制**:使用JavaFX的`Scene`和`Shape`类(比如`Rectangle2D`, `Circle`等)来绘制几何图形。图形的事件处理可能与形状的位置、大小或鼠标交互有关。 4. **图形计算器逻辑**:根据用户的选择或操作,动态地改变图形的属性或执行计算。这可能涉及到图形的变换、动画效果或实时反馈。 相关问题-- 1. 如何在JavaFX中为按钮添加点击事件? 2. 如何在图形绘制完成后绑定鼠标事件进行交互? 3. JavaFX中的图形事件如何传递给后台逻辑进行处理?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值