什么是事件源对象?什么是事件对象?描述事件源对象和事件对象之间的关系。
事件源对象:接收外部事件的源体(用按钮理解)
事件对象:程序发生某些事情的信号
比如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();