java游戏编程里JPanel怎样监控键盘呀? 下面是我的代码,为什么我加了监控不起作用?
importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.applet.*;publi...
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Game extends JFrame{//让该类继承JFrame好调用一些方法
Game(){//构造方法,在类被实例化的时候自动调用
this.setContentPane(new Map()); //打印出地图
this.setTitle("神级文字游戏"); //设置标题
this.setBounds(400,200,300,200); //设置窗口在屏幕显示的位置和宽度长度
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置该窗口可以点击关闭后结束运行
this.setResizable(false); //设置窗口一旦出现便不可改变大小
this.setVisible(true); //显示窗口
}
public static void main(String[] args){
new Game(); //让Game类实例化
}
}
class Map extends JPanel implements ActionListener{//这个Map就是在窗口显示的东西,在该类里继承了JPanel并且加了ActionListener接口
//定义出地图的初始量
int y;
Timer timer;
Map(){//地图的一些初始化
y=5;
timer=new Timer(100,this); //设置计时器,每100毫秒就执行这个类的监视器
timer.start(); //计时器开始工作
}
public void actionPerformed(ActionEvent ae){//为这个Map类加入一个监视器以供监视判断
y=y+5;
if(y>this.getHeight())y=5;
repaint(); //返回到paint方法
}
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
switch(keyCode){
case KeyEvent.VK_6:
y=10;
repaint();
break;
}
}
public void paint(Graphics g){//这部分是专门绘画的,当Map启动时,会自动调用这部分来画出东西
super.paint(g); //擦干净再画
g.setColor(Color.RED); //设置绘画的颜色
g.fillOval(30, y, 20, 20); //画圆
}
} 展开
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Game extends JFrame{//让该类继承JFrame好调用一些方法
Game(){//构造方法,在类被实例化的时候自动调用
this.setContentPane(new Map()); //打印出地图
this.setTitle("神级文字游戏"); //设置标题
this.setBounds(400,200,300,200); //设置窗口在屏幕显示的位置和宽度长度
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置该窗口可以点击关闭后结束运行
this.setResizable(false); //设置窗口一旦出现便不可改变大小
this.setVisible(true); //显示窗口
}
public static void main(String[] args){
new Game(); //让Game类实例化
}
}
class Map extends JPanel implements ActionListener{//这个Map就是在窗口显示的东西,在该类里继承了JPanel并且加了ActionListener接口
//定义出地图的初始量
int y;
Timer timer;
Map(){//地图的一些初始化
y=5;
timer=new Timer(100,this); //设置计时器,每100毫秒就执行这个类的监视器
timer.start(); //计时器开始工作
}
public void actionPerformed(ActionEvent ae){//为这个Map类加入一个监视器以供监视判断
y=y+5;
if(y>this.getHeight())y=5;
repaint(); //返回到paint方法
}
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
switch(keyCode){
case KeyEvent.VK_6:
y=10;
repaint();
break;
}
}
public void paint(Graphics g){//这部分是专门绘画的,当Map启动时,会自动调用这部分来画出东西
super.paint(g); //擦干净再画
g.setColor(Color.RED); //设置绘画的颜色
g.fillOval(30, y, 20, 20); //画圆
}
} 展开
2个回答
展开全部
Game构造方法里面加一句:setFocusable(true);
JPanel 默认不接收键盘事件,上面是对默认行为对覆盖
不行可以追问
JPanel 默认不接收键盘事件,上面是对默认行为对覆盖
不行可以追问
追问
不行呐.......
追答
额,话说你的JPanel还没实现KeyListener,只弄了个KeyPressed方法,何来的键盘事件,你在构造方法里面还要添加键盘事件addKeyListener。再加上我上面那句,帮你调试过,可以的,另外你的分不给力。~^~
代码太多,粘不上,给你主要的吧
class Map extends JPanel implements ActionListener,KeyListener{
Map(){//地图的一些初始化
y=5;
setFocusable(true);
addKeyListener(this);
timer=new Timer(100,this); //设置计时器,每100毫秒就执行这个类的监视器
timer.start(); //计时器开始工作
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询