6.5 ControledBall(受控移动的小球)

6.5 ControledBall(受控移动的小球)

当用户按下了键盘,单击了鼠标,操作了窗口等“事件”发生的时候,程序需要给出响应。

要实现对用户事件响应,需要以下两点:第一,监听到事件的发生;第二,在监听到事件发生之后,捕获事件,并根据事件给予响应处理。

Java采用“委派式”事件处理机制(如图1.6.7所示),事件源组件会先注册“监听器”对象,当监听到事件发生的时候,把事件对象发送给事件监听器,事件监听器负责调用响应方法来处理事件。

图1.6.7 Java“委派式”事件处理机制

程序的实现过程如下。

(1)定义事件监听器类。

作为事件监听器的类需要满足两个条件。

①实现某种事件监听器的接口。

要监听键盘按键事件,监听器的类需在类定义的头部加入“implements Key Listener;”,实现键盘监听器接口。例如,

这里可以先把实现接口与继承父类这两件事当作是相似的功能:一个类只要实现了Key Listener的接口,就可以有监听键盘事件的功能了。那么,实现接口和继承父类,有什么不同吗?直接的不同就是,若仅仅实现接口,则有编译错误,如图1.6.8所示。

图1.6.8 编译出错

我们看看Eclipse给的建议,如图1.6.9所示。

图1.6.9 Eclipse给的建议

②实现监听器接口中所有的事件响应方法。我们选择Eclipse给出的第一个解决方案“添加未实现的方法”,这样类里面就加入3个空的方法。

这3个方法是键盘事件的3个响应方法,要对哪个事件进行响应,就把响应的执行内容写入对应的响应方法中。当事件发生的时候,相应的响应方法就会被自动调用。

捕获到的事件对象通过响应方法的参数传递给我们。在上述代码中,参数e就是当前捕获到的事件对象,要想得到任何和当前事件相关的信息,都可以通过事件对象来获取。例如,e.get KeyCode()就可用来获得当前按下的键的键码。

有关事件和事件响应会在第9章介绍。

(2)将事件监听器对象注册在负责监听的组件上。

需求:在一个300×400的窗口中显示一个半径为20的小球,可通过键盘的上、下、左、右键控制小球的移动方向。

代码6.6-1

代码6.6-2

代码6.6-3

【代码6.6】“受控移动的小球”的参考代码

运行程序后,窗口对象就处于键盘事件监听的状态,一旦键盘按键被按下的事件发生,这个事件就会被监听到,并且public void keyPress(Key Event arg0)方法就会被调用,其中的参数arg0就是被捕获到的事件对象。

拓展:了解主要的事件监听器接口还有哪些,它们主要监听哪些事件,每种监听器对应的相应方法有哪些。