事件驱动编程和动画

什么是事件源对象?什么是事件对象?描述事件源对象和事件对象之间的关系。

事件源对象:接收外部事件的源体(用按钮理解)

事件对象:程序发生某些事情的信号

如click press enter

事件处理器里面的方法的形式参数类型是事件类型(代码中体现)

事件源对象和事件对象的关系:

1.点击事件源,事件源产生一个事件(ActionEvent),将事件作为参数传进监听器中

2.将事件源和事件绑定在一起类似于反向绑定,事件源相当于target,事件相当于source

3.事件是事件处理器当中的参数,而事件处理器一般注册到事件源当中

事件驱动的业务逻辑

点击button(事件源),事件源产生一个事件(ActionEvent),将事件作为参数传进处理器中,调用EventHandler类的Handle()方法(唯一方法并且需要重写)

 如何注册一个处理器对象,以及如何实现一个处理器接口?

setOnAction函数

button.setOnAction(myHandler)

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Button button = new Button("Click me");
        button.setOnAction(new MyHandler());

        VBox root = new VBox();
        root.getChildren().add(button);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

实现处理器接口的方法

1.创建外部类

2.创建内部类

3.创建匿名内部类

4.使用Lambda表达式

EventHandler<ActionEvent> 接口的处理器方法是什么?

public void handle(ActionEvent event)

对一个按钮注册一个ActionEvent 处理器的注册方法是什么?

setOnAction()

如果类 A 是类 B 中的一个内部类,A 的类文件名字是什么?如果类 B 包含两个匿名内部类,这两个类的 .class 文件名是什么?

A类文件名字:B.A

文件名:B$1.class和B$2.class

下面代码中的错误是什么?

<ActionEvent>后面缺少括号,倒数第三行缺少右半个括号(匿名内部类的知识)

一个 Observable 类的实例被认为是一个可观察对象,如何添加一个监听器?监听器必须实现什么接口?!!!Observer

1.实现Observer接口

import java.util.Observer;

public class YourObserver implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        // 实现更新逻辑
    }
}

2.创建Observable对象

import java.util.Observable;

public class YourObservable extends Observable {
    // 其他必要的逻辑

    public void someEvent() {
        // 在事件发生时调用
        setChanged();
        notifyObservers(someData);
    }
}

3.添加观察者

YourObservable observable = new YourObservable();
YourObserver observer = new YourObserver();
observable.addObserver(observer);

什么是功能接口?为什么对于一个 lambda 表达式而言,必须是一个功能接口? 

功能接口:只包含一个抽象方法的接口

lambda表达式只对函数的接口起作用,为了让编译器理解,接口必须包含精确的抽象方法。

对于一个鼠标按下、释放、单击、进入、退出、移动和拖动事件,使用什么方法来注册一个相应的处理器?

单击setOnMouseClicked()

按下setOnMousePressed()

释放setOnMouseReleased()

进入setOnMouseEntered()

退出setOnMouseExited()

拖动setOnMouseDragged()

移动setOnMouseMoved()

使用什么方法来针对键的按下、释放以及敲击事件注册处理器?这些方法定义在哪些类中?

按下setOnKeyPressed()

敲击setOnKeyTyped()

释放setOnKeyReleasd()

这些方法定义类javafx.scene.control.Button当中

如何将一个动画的循环次数设置为无限次?如何自动倒转一个动画?如何开始、暂停以及停止

一个动画?

本质:周期性事件  Animation类

用setCycleCount(Timeline.INDEFINITE)将一个动画的循环次数设置为无限次

用setAutoReverse(true)自动倒转一个动画

play( )开始  pause( )暂停 stop( )停止

如何创建一个PathTransition?如何创建一个FadeTransition?如何创建一个Timeline?

PathTransition pt = new PathTransition();

FadeTransition ft = new FadeTransition();

Timeline tl = new Timeline();

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值