我们对点击按钮引发事件比较熟悉了,但在许多项目实战中,一个按键事件往往是不够的,很多时候我们也会用到键盘来引发一些事件,例如游戏中控制角色上下左右移动,这里,我们用一个简单的控制小球移动的实例来详细讲解事件处理机制。
看以下代码
/*
* 功能:加深对事件处理机制的理解
* 1.通过键盘上下左右键,来控制一个小球的位置
*/
package demo01;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Jianpan extends JFrame{
MyPanel mp = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Jianpan jp1= new Jianpan();
}
public Jianpan(){
mp =new MyPanel();
this.add(mp);
this.addKeyListener(mp);
this.setSize(400,300);
this.setVisible(true);
}
}
//定义自己的面板
class MyPanel extends JPanel implements KeyListener
{
int x=10;
int y=10;
public void paint(Graphics g)
{
super.paint(g);
g.fillOval(x,y,20,20);
}
@Override
public void keyTyped(KeyEvent e) {//键的一个值被输出
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {//键被按下
// TODO Auto-generated method stub
// System.out.println("键被按下"+(char)e.getKeyCode());//没有强制转换char输出是Ascall码
if(e.getKeyCode()==KeyEvent.VK_DOWN){
y+=3;
}else if(e.getKeyCode()==KeyEvent.VK_UP){
y-=3;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
x-=3;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x+=3;
}
//调用repaint函数来重绘界面;
this.repaint();
}
@Override
public void keyReleased(KeyEvent e) {//键被释放
// TODO Auto-generated method stub
}}
代码参考韩顺平java教程