📄 keylistenerdemo.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyListenerDemo extends JFrame implements KeyListener
{
Image playerImage[]=new Image[4]; //声明并创建图像对象
Image player; //声明图像对象
Toolkit tool; //使用Toolkit工具类,声明其对象
int x=200,y=200; //坦克图像的初始坐标
public KeyListenerDemo()
{
super("KeyListenerDemo"); //添加键盘事件监听器
tool=getToolkit(); //创建Toolkit工具类对象,用于获取图像
//获取.gif图像文件,并存于Image对象数组中
playerImage[0]=tool.getImage("up.gif"); //向上方向坦克图像
playerImage[1]=tool.getImage("down.gif"); //向下方向坦克图像
playerImage[2]=tool.getImage("left.gif"); //向左方向坦克图像
playerImage[3]=tool.getImage("right.gif"); //向右方向坦克图像
//设置所要画的坦克图像的初始图像为,向上方向的坦克图像
player = playerImage[0];
addKeyListener(this); //添加键盘事件监听器
this.setSize(400,400); //设置窗口大小
this.setVisible(true); //设置窗口为可见
}
public void paint(Graphics g) //绘制图像方法
{
super.paint(g); //调用父类的方法paint()
g.setColor(Color.WHITE);
g.fillRect(0,0,400,400); //使用背景色清屏
//在窗口组件中绘制坦克图像
g.drawImage(player,x,y,48,48,this);
}
public void keyPressed(KeyEvent e) //玩家行动控制,键盘事件处理
{
switch (e.getKeyCode())
{
case KeyEvent.VK_UP: //当按下光标上键的事件处理
player = playerImage[0]; //绘制图像取坦克向上的图像
if (y-32<0) break; //超过边界返回
else y--; //不超过边界纵坐标减1
repaint(); //重新绘制函数
break;
case KeyEvent.VK_DOWN: //当按下光标下键的事件处理
player = playerImage[1]; //绘制图像取坦克向下的图像
if(y+48>400) break;
else y++; //不超过边界纵坐标加1
repaint(); //重新绘制函数
break;
case KeyEvent.VK_LEFT: //当按下光标左键的事件处理
player = playerImage[2]; //绘制图像取坦克向左的图像
if(x-2<0) break;
else x--; //不超过边界横坐标减1
repaint();
break;
case KeyEvent.VK_RIGHT: //当按下光标右键的事件处理
player = playerImage[3]; //绘制图像取坦克向右的图像
if(x+48>400) break;
else x++; //不超过边界横坐标加1
repaint();
break;
}
}
//实现KeyListener接口中抽象方法,方法体为空
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public static void main(String[] args)
{
KeyListenerDemo demo = new KeyListenerDemo();
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -