Node1.addEventFilterKeyEvent.KEY_PRESSED filter注意:为一个事件类型定义的过滤器也可用于事件的任意子类。
查看“事件类型”了解事件类型层级相关信息。
当不再需要过滤器来处理节点事件或事件类型是,可以用 removeEventFilter方法来删除过滤器。
这个方法需要一个事件类型和过滤器作为参数。
在示例 3-2 中,示例 3-1 中为 而myNode1 定义的 MouseEvent.MOUSE_PRESSED 事件过滤器被删除。
myNode2 和没有 Node1的 KeyEvent.KEY_PRESSED 事件仍会执行。
示例 3-2 删除过滤器// Remove an event filtermyNode1.removeEventFilterMouseEvent.MOUSE_PRESSED filter1.3.2 使用事件过滤器事件过滤器典型应用于时间派发链表的分支节点上, 并在事件处理的捕获期间被调用。
过滤器的作用是执行诸如覆盖某事件响应或阻塞事件到达相应目的。
可以下载“DraggablePanelsExample.zip”开看过滤器如何应用的。
下面部分将描述一下这个示例。
可拖动面板例子可拖动面板示例演示了过滤器的如下用法: 为超类型事件注册过滤器并为子类事件提供通用处理; 销毁事件来阻止子节点执行。
图 3-1 截屏展示了可拖动面板示例启动的情形。
用户界面有三个面板组成,每个面板包括不同的 UI 控件。
在底部是一个选择框,由它来控制面板是否可拖动。
图 3-1 可拖动面板的初始屏幕如果选择框没选中,点击任何界面控件都会产生相应响应。
如果选择框选中了,则个别控件不会响应鼠标点击。
相反,点击面板内任意地方并拖动鼠标移动整个面板,将可改变面板的位置,如图 3-2 所示。
图 3-2 可重定位面板界面可拖动面板过滤器示例 在可拖动面板示例中,makeDraggable方法用于创建面板,并使每个面板可移动。
这个方法和过滤器在示例 3-3 中被定义。
示例 3-3 在 makeDraggable定义过滤器private Node makeDraggablefinal Node node final DragContext dragContext new DragContext final Group wrapGroup new Groupnode wrapGroup.addEventFilter MouseEvent.ANY new EventHandlerltMouseEventgt public void handlefinal MouseEvent mouseEvent if dragModeActiveProperty.get // disable mouse events for all children mouseEvent.consume wrapGroup.addEventFilter MouseEvent.MOUSE_PRESSED new EventHandlerltMouseEventgt public void handlefinal MouseEvent mouseEvent if dragModeActiveProperty.get // remember initial mouse cursor coordinates // and node position dragContext.mouseAnchorX mouseEvent.getX dragContext.mouseAnchorY mouseEvent.getY dragContext.initialTranslateX node.getTranslateX dragContext.initialTranslateY node.getTranslateY wrapGroup.addEventFilter MouseEvent.MOUSE_DRAGGED new EventHandlerltMouseEventgt public void handlefinal MouseEvent mouseEvent if dragModeActiveProperty.get // shift node from its initial position by delta .
上一篇:
AES加密解密算法(Java版本)
下一篇:
软件工程毕业设计论文