跟着王洋老师学编程 - 1.7 键盘控制小球
一 、 抽象方法/类 和 接口的定义
- 抽象方法 - 无法清晰描述的方法,比如动物类的吃方法;
- 抽象类 - 如果一个类中含有抽象方法,那这个类也必须要定义成抽象类;
- 接口 - 如果一个类中只有抽象方法,没有属性,这就是一个纯抽象类,即接口。
1 abstract class Animal{ // 抽象类 2 public abstract void eat(); // 抽象方法 3 }
1 interface Animal{ // 接口 2 public void eat(); // 不再需要写abstract 标识 3 }
二、键盘控制小球的实现
根据老师的讲解,开发思路如下:
- 实例化一个窗体
- 定义画布类——继承画布类、实现键盘监听接口,重写键盘监听接口的三个抽象方法
- 实例化一个画布,将画布添加到窗体,并注册监听键盘事件
代码一
【运行结果】编译失败
【原因分析】错误提示已经很明确,keyCode属性不能直接通过对象访问,很可能是个私有属性,查API文档,得知获取keyCode的方法
代码二
1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class KeyBall{ 5 public static void main(String args[]){ 6 Frame w = new Frame(); 7 w.setSize(400,300); 8 9 KeyBallPanel kbp = new KeyBallPanel(); 10 w.add(kbp); 11 12 // 注册事件,double confirm 13 //w.addKeyListener(kbp); 14 kbp.addKeyListener(kbp); 15 16 w.setVisible(true); 17 } 18 } 19 20 class KeyBallPanel extends Panel implements KeyListener{ 21 int x = (int)(Math.random()*400); 22 int y = (int)(Math.random()*300); 23 public void paint(Graphics g){ 24 g.setColor(Color.red); 25 //System.out.println(x+" "+y); 26 g.fillOval(x,y,10,10); 27 } 28 @Override 29 public void keyPressed(KeyEvent ke){ 30 //System.out.println(ke); 31 int kc = ke.getKeyCode(); 32 System.out.println(kc); 33 switch(kc){ 34 case 38:y--;break; 35 case 40:y++;break; 36 case 37:x--;break; 37 case 39:x++; 38 } 39 repaint(); 40 } 41 @Override 42 public void keyReleased(KeyEvent ke){ 43 //System.out.println(ke); 44 45 } 46 @Override 47 public void keyTyped(KeyEvent ke){ 48 //System.out.println(ke); 49 } 50 }
【运行结果】完美实现键盘控制小球~~~^_^
posted on 2023-12-28 17:22 Shannon_Zhang 阅读(7) 评论(0) 编辑 收藏 举报