aliz e 方法初始化游戏。接下来再增加事件监听器, 先使用 JFrame 的 keyKeyListeners() 方法获取本窗口的 KeyLister 数组, 如果这个数组的长度为空,说明本窗口并没有添加到任何 KeyListener ,所以就创建一个 KeyAdapter (为 JFrame 创建一个键盘监听器)并重写 KeyAdapter 类的 void keyPressed(KeyEvent ke) 方法,这个方法用来监听键盘的按键是否有按下,如果有的话,就需要调用 BallService 的 setStickPos 方法。当我们去实现 setStickPos 方法的时候,就需要设置小球为运动状态,启动弹球游戏就意味着小球开始进行运动。当我们在游戏中按下左右键的时候, 同时需要移动挡板, 启动游戏后, 我们并不需要关心小球的移动,仅仅设置小球的运动状态,换言之, setStickPos 方法只是处理挡板的移动,小球的运动让 BallService 的 run 处理( run 方法 100 毫秒执行一次)。5 挡板、小球、砖块、道具在这个设计中,挡板、小球、砖块与砖块中所包含的道具都有一个共同的父类 ,可以使用父类的 set X与 set Y 方法设置坐标, 也可以使用 get X与 get Y 方法获取坐标, 还可以使用 getImag e 方法获取图片,并且父类根据不同的情况提供了几个不同的构造器, 5.1 挡板( Stick 类) 此类提供一个以画板的宽、高和挡板的图片路径为参数的构造器,见以下代码。代码清单: code\ball\\crazyit\ball\Stick.java public Stick( int panelWidth , int panelHeight, String path ) throws IOException { //调用父构造器