applet中用键盘(方向键)控制小方块移动.求助!!这个程序用键盘控制没反应,高手看看啊.java编译好累啊.(100分)

  • 主题发起人 主题发起人 nblueguy
  • 开始时间 开始时间
N

nblueguy

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的程序用键盘操作没反应,编译通过.高手看看原因.
import java.awt.*;
import java.applet.*;
public class wumin1 extends Applet{
carton carton_1=null;
//申明一个carton类的实例
//Graphics g;
public void start(){
if(carton_1==null)
{
carton_1=new carton(getGraphics(),this);
carton_1.start();
}

}
public void stop()
{ carton_1.stop();
carton_1=null;


}


public boolean keyDown(Event e,int key){
if(key==Event.UP)
carton_1.set_direction(0);
if(key==Event.DOWN)
carton_1.set_direction(1);

if(key==Event.LEFT)
carton_1.set_direction(2);

if(key==Event.RIGHT)
carton_1.set_direction(3);

return true;

}


public boolean keyUp(Event e,int key){
if(key==Event.UP)
carton_1.clear_direction(0);
if(key==Event.DOWN)
carton_1.clear_direction(1);

if(key==Event.LEFT)
carton_1.clear_direction(2);

if(key==Event.RIGHT)
carton_1.clear_direction(3);

return true;

}

}
class carton extends Thread {
boolean up=false,down=false,left=false,right=false;
int position_x=200,position_y=150;
private Applet applet;
private Graphics g;
int sleep_time=50;//睡眠时间
Color my_color;
//初始化时要将各种环境准备好
public carton(Graphics a,Applet app)
{
g=a;
applet=app;
}
//这是主运行函数.
public void run()
{
while(true)//此函数一直运行
{
set_position();//计算小方块坐标
draw_image();//画小方块

try//标准的暂停方式
{
sleep(sleep_time);
}
catch(InterruptedException e)
{
}
}
}

//计算小方块的坐标
public void set_position()
{
if(up==true &&
position_y>1)//假如向上的键被按下并且小方块的纵坐标大于1
position_y--;//小方块向上移动
if(down==true &&
position_y<330)//假如向下的键被按下并且小方块的纵坐标小于330
position_y++;//小方块向下移动
if(left==true &amp;&amp;
position_x>1)//假如向左的键被按下并且小方块的横坐标大于1
position_x--;//小方块向左移动
if(right==true &amp;&amp;
position_x<380)//假如向右的键被按下并且小方块的横坐标小于380
position_x++;//小方块向右移动
}
//画屏幕
public void draw_image()
{
my_color=new Color(179,179,179);
g.setColor(my_color);
g.fillRect(0,0,400,350);//画背景
my_color=new Color(100,100,100);
g.setColor(my_color);
g.fillRect(position_x,position_y,20,20);//根据小方块的坐标画小方块


}
//表示方向的布尔变量的置true方法
public void set_direction(int direction)
{
switch(direction)
{
case(0)://向上键被按下则向上的布尔变量置位
up=true;
break;
case(1)://向下键被按下则向下的布尔变量置位
do
wn=true;
break;
case(2)://向左键被按下则向左的布尔变量置位
left=true;
break;
case(3)://向右键被按下则向右的布尔变量置位
right=true;
break;
default:
break;
}
}
//表示方向的布尔变量的置false方法
public void clear_direction(int direction)
{ switch(direction)
{
case(0)://向上键被松开则向上的布尔变量置false
up=false;
break;
case(1)://向下键被松开则向下的布尔变量置false
do
wn=false;
break;
case(2)://向左键被松开则向左的布尔变量置false
left=false;
break;
case(3)://向右键被松开则向右的布尔变量置false
right=false;
break;
default:
break;
}
}






}


 
这个问题我自己解决了.原来没有APPLET没有焦点.以上代码是正确的.
 
后退
顶部