JavaFX addEventHandler事件处理
JavaFX 方便我们使用事件处理程序来处理由键盘操作、鼠标操作和更多源节点生成的事件。
事件处理程序用于处理事件冒泡阶段的事件。一个节点可以有多个事件处理程序。
我们还可以对多个节点和多个事件类型使用单个处理程序。在教程的这一部分中,我们将讨论如何使用事件处理程序来处理事件。
添加事件处理程序
为了在事件冒泡阶段处理事件,必须为节点注册事件处理程序。事件处理程序是 EventHandler 接口的实现。接口的 handle() 方法包含触发事件时执行的逻辑。
要注册 EventHandler,使用addEventHandler()。在这个方法中,传递了两个参数。一种是事件类型,另一种是 EventHandler 对象。
addEventHandler()的语法如下:
node.addEventHandler(<EventType>,new EventHandler<Event-Type>()
{
public void handle(<EventType> e)
{
//handling code
}
});
事件处理程序的例子
在以下示例中,使用两个不同的按钮注册了相同的事件处理程序。在handle()方法中区分事件源。单击“播放”按钮时,圆圈开始沿 X 正方向平移,单击“暂停”按钮时,它会暂停。
package com.yiidian;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class JavaFX_EventHandler extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
//Creating Circle and setting the color and stroke in the circle
Circle c = new Circle(100,100,50);
c.setFill(Color.GREEN);
c.setStroke(Color.BLACK);
//creating play button and setting coordinates for the button
Button btn = new Button("播放");
btn.setTranslateX(125);
btn.setTranslateY(200);
// creating pause button and setting coordinate for the pause button
Button btn1 = new Button("暂停");
btn1.setTranslateX(175);
btn1.setTranslateY(200);
//Instantiating TranslateTransition class to create the animation
TranslateTransition trans = new TranslateTransition();
//setting attributes for the TranslateTransition
trans.setAutoReverse(true);
trans.setByX(200);
trans.setCycleCount(100);
trans.setDuration(Duration.millis(500));
trans.setNode(c);
//Creating EventHandler
EventHandler<MouseEvent> handler = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(event.getSource()==btn)
{
trans.play(); //animation will be played when the play button is clicked
}
if(event.getSource()==btn1)
{
trans.pause(); //animation will be paused when the pause button is clicked
}
event.consume();
}
};
//Adding Handler for the play and pause button
btn.setOnMouseClicked(handler);
btn1.setOnMouseClicked(handler);
//Creating Group and scene
Group root = new Group();
root.getChildren().addAll(c,btn,btn1);
Scene scene = new Scene(root,420,300, Color.WHEAT);
primaryStage.setScene(scene);
primaryStage.setTitle("一点教程网:EventHandler example");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
输出结果为:
删除事件处理程序
当我们不再需要 EventHandler 来处理节点或事件类型的事件时,我们可以使用removeEventHandler()方法删除 EventHandler 。这个方法有两个参数,事件类型和 EventHandler 对象。
node.removeEventHandler(<EventType>,handler);
热门文章
优秀文章