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); 

 

热门文章

优秀文章