Java事件处理机制2
实现一个小程序,怎样让小球受到键盘的控制,上下左右移动,如图:
1 public class Demo3 extends JFrame{ 2 MyPanel mp=null; 3 public static void main(String[] args) { 4 Demo3 demo=new Demo3(); 5 } 6 7 //构造函数 8 public Demo3(){ 9 mp=new MyPanel(); 10 11 //mp加入到JFrame 12 this.add(mp); 13 14 this.addKeyListener(mp); 15 16 this.setSize(400,300); 17 this.setVisible(true); 18 } 19 } 20 21 //定义自己的面板 22 class MyPanel extends JPanel implements KeyListener{ 23 int x=10; 24 int y=10; 25 public void paint(Graphics g){ 26 super.paint(g); 27 28 g.fillOval(x, y, 10, 10); 29 } 30 31 @Override 32 public void keyPressed(KeyEvent e) { //代表某个键被压下去了 33 //System.out.println("键被压"+(char)e.getKeyCode()); 34 if(e.getKeyCode()==KeyEvent.VK_DOWN){ 35 y++; 36 }else if(e.getKeyCode()==KeyEvent.VK_UP){ 37 y--; 38 }else if(e.getKeyCode()==KeyEvent.VK_LEFT){ 39 x--; 40 }else if(e.getKeyCode()==KeyEvent.VK_RIGHT){ 41 x++; 42 } 43 //调用repaint()函数,重绘界面 44 this.repaint(); 45 } 46 47 @Override 48 public void keyReleased(KeyEvent e) { //键被释放 49 // TODO Auto-generated method stub 50 } 51 52 @Override 53 public void keyTyped(KeyEvent e) { //键的一个值被输出 54 // TODO Auto-generated method stub 55 } 56 }
这里的事件源是JFrame
事件的监听者是mp。
运行程序,效果如下:(若想实现小球的快速移动,只需修改x,y增加的大小)