大都销毁了多数的输入事件。
UI 更多相关信息可以查看“JavaFX 。
API 文档”1.2 使用便利的方法 本篇主题是描述在 JavaFX 应用中可以用于注册事件处理器的便利方法,即学习一种简单的方法来创建和注册事件处理器,以对鼠标事件、键盘事件、行为事件、拖放事件、窗口事件及其它做出响应。
有些 JavaFX 类定义了事件处理器特性,这些特性提供了注册事件处理器的方法。
把事件处理器特性配置到用户定义的处理器, 以便注册处理器来接收处理相应的事件类型。
为事件处理器属性提供的 Setter 方法是一种便利的事件处理器注册方式。
1.2.1 使用便利方法 许多便利的方法在 Node 类中定义了,且对其所有子类都可用。
其它的类也有便利的方法。
表 2-1 描述了能用于处理事件的便利方法以及识别哪个类中定义了便利方法。
表 2-1 有便利方法的事件处理器类用户行为 事件类型 类键盘按键 KeyEvent Node、Scene鼠标移动或按键 MouseEvent Node、Scene以交替方式输入字符,或生成、 InputMethodEvent Node、Scene改变、删除或提交拖动对象 DragEvent Node、Scene滚动对象 ScrollEvent Node、Scene按按钮或选中菜单项 ActionEvent ButtonBaseCOntextMenu MenuItemTextField编辑清单、表或树的项 ListView.EditEvent ListView TableColumn.EditEvent TableColumn TreeView.EditEvent TreeView播放器出错 MediaErrorEvent MediaView菜单展示或隐藏 Event Menu弹出窗口隐藏 Event PopupWindowTab 选中或关闭 Event Tab窗口关闭、展示或隐藏 WindowEvent Window注册事件处理器的便利方法格式如下:setOnEvent-typeEventHandlerlt super event-classgt value其中,Event-type 是事件处理器处理的事件类型,如 setOnKeyTyped 的 KEY_TYPED 事件,或setOnMouseClicked 的 MOUSE_CLICKED 的事件; 如 event_class 是定义事件类型的类, KeyEvent是与键盘输入相关事件,MouseEvent 是鼠标输入相关事件;lt Super event-classgt标明event-class 或作为参数的超类事件处理器的接收事件处理器的方法。
例如 InputEvent 的处理器即可用于鼠标事件也可用于键盘事件。
下面语句展示了这种注册时间处理器处理按键时产生的事件的方法的定义, 即按键或释放时:setOnKeyTypedEventHandlerlt super KeyEventgt value通过定义匿名处理器类来调用这种便利方法一步创建或注册事件处理器。
事件处理器必须实现 handle方法,并提供相应的处理事件的代码。
便利方法应用示例如代码所示,代码用 Netbeans IDE 创建 JavaFX 应用产生。
创建应用时,如果选择“创建应用类 ” (Create Application Class) 选项,创建的主类包含一个“Hello World”应用。
生成的代码如示例 2-1 所示。
示例 2-1 Hello World 例子package yourapplicationimport javafx.application.Applicationimport javafx.event.ActionEventimport javafx.event.EventHandlerimport javafx.scene.Groupimport javafx.scene.Sceneimport javafx.scene.control.Buttonimport javafx.stage.Stagepublic class YourApplication extends Application / param args the command line arguments / public static void mainString args Application.launchargs Override public void startStage primaryStage primaryStage.setTitlequotHello Worldquot Group root new Group Scene scene new Sceneroot 300 250 Button btn new Button btn.setLayoutX100 btn.setLayoutY80 btn.setTextquotHello Worldquot btn.setOnActionnew EventHandlerltActionEventgt public void handleActionEvent event System.out.printlnquotHello Worldquot root.getChildren.addbtn primaryStage.setScenescene primaryStage.show “Hello World”代码创建了带一个按钮的视窗。
setOnAction方法用于注册事件处理器,以便处理按钮点击时派发的行为事件。
处理器中 Handle方法通过打印字符串“Hello World”到控制台来处理事件。
鼠标事件示例为 鼠 标 事 件 注 册 处 理 器 的 便 利 方 法 包 括 setOnMouseEntered 、 setOnMouseExited 和setOnMousePressed。
示例 2-2 展示了这些事件处理器的示例。
示例 2-2 鼠标事件处理器例子 final Circle circle new Circleradius Color.RED circle.setOnMouseEnterednew EventHandlerltMouseEventgt public void handleMouseEvent me System.out.printlnquotMouse enteredquot circle.setOnMouseExitednew EventHandlerltMouseEventgt public void handleMouseEvent me System.out.printlnquotMouse exitedquot circle.setOnMousePressednew EventHandlerltMouseEventgt public void handleMouseEvent me System.out.printlnquotMouse pressedquot 为明白应用的事件处理器如何相似,可以运行“Ensemble”示例,可以在此位置下载应用示例捆绑包,其中的例子都有源代码。
键盘事件示例为键盘准备的注册处理器的便利方法有 setOnKeyPressed 和 setOnKeyReleased,示例 2-3 展示了这些处理器的应用示例。
示例 2-3 键盘事件处理器例子final TextField textBox new TextFieldtextBox.setPromptTextquotWrite herequottextBox.setOnKeyPressednew EventHandlerltKeyEventgt public void handleKeyEvent ke System.out.printlnquotKey Pressed: quot ke.getText textBox.setOnKeyReleasednew EventHandlerltKeyEventgt public void handleKeyEvent ke System.out.printlnquotKey Released: quot ke.getText 相关示例也可在“Ensemble ”中查看。
其它相关内容也可查看相关的 API 文档。
1.3 使用事件过滤器这部分描述 JavaFX 应用中事件过滤器相关内容。
学习过滤器如何用于处理由键盘、鼠标、滚动以及其交互行为产生的事件。
事件过滤器使你能在事件处理的捕获阶段期间来处理事件。
一个节点对象可以有多于一个的事件处理过滤器。
单个过滤器可以用于多个节点或多个事件类型。
过滤器使父节点能为子节点提供一个通用的处理或拦截一个事件,并阻止子节点执行相应事件。
1.3.1 注册和删除事件过滤器为在事件捕获节点处理事件,节点必须注册一个事件过滤器。
事件过滤器实现了EventHandler 接口。
事件由注册过滤器的节点接收,实现事件与过滤器关联,由 Handle方法内提供执行代码做相关处理。
为了注册过滤器,使用 addEventFilter 方法。
这个方法有事件类型和过滤器两个参数。
在示例 3-1 中,第一个过滤器添加到单个节点并处理了一个特定类型事件。
第二个过滤器处理输入事件,由两个不同节点注册。
相同的过滤器也可注册到两个不同类型的事件上。
示例 3-1 注册过滤器 // Register an event filter for a single node and a specific event type node.addEventFilterMouseEvent.MOUSE_CLICKED new EventHandlerltMouseEventgt public void handleMouseEvent ... // Define an event filter EventHandler filter new EventHandlerltInputEventgt public void handleInputEvent event System.out.printlnquotFiltering out event quot event.getEventType event.consume // Register the same filter for two different nodes myNode1.addEventFilterMouseEvent.MOUSE_PRESSED filter myNode2.addEventFilterMouseEvent.MOUSE_PRESSED filter // Register the filter for another event type my
上一篇:
AES加密解密算法(Java版本)
下一篇:
重庆交通大学机电与汽车工程学院毕业设计(论文)工作规范修订20140430