import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class move extends Applet implements KeyListener{
int x=10;
int y=10;
int i; public void init(){
i=0;
setFocusable(true);
this.addKeyListener(this);
}
public void paint(Graphics g){
g.setColor(Color.red);
g.fillOval(x, y, 10, 10);
}
public void keyPressed(KeyEvent e) {
i=e.getKeyCode();
while(i==KeyEvent.VK_RIGHT)
{
x=x+1;
setLocation(x,y);
if(x>=1024)
{
x=0;
}
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
repaint();
}
while(i==KeyEvent.VK_LEFT)
{
x=x-1;
setLocation(x,y);
if(x<=0)
{
x=1024;
}
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
while(i==KeyEvent.VK_DOWN)
{
y=y+1;
setLocation(x,y);
if(y>=768)
{
y=0;
}
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
while(i==KeyEvent.VK_UP)
{
y=y-1;
setLocation(x,y);
if(y<=0)
{
y=768;
}
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
} public void keyReleased(KeyEvent e) {
} public void keyTyped(KeyEvent e) {
} }//为什么按下一个方向键时,小球就移动,按其它的方向键时就没有反应了呢????求高手解答。如何改???
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class move extends Applet implements KeyListener{
int x=10;
int y=10;
int i; public void init(){
i=0;
setFocusable(true);
this.addKeyListener(this);
}
public void paint(Graphics g){
g.setColor(Color.red);
g.fillOval(x, y, 10, 10);
}
public void keyPressed(KeyEvent e) {
i=e.getKeyCode();
while(i==KeyEvent.VK_RIGHT)
{
x=x+1;
setLocation(x,y);
if(x>=1024)
{
x=0;
}
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
repaint();
}
while(i==KeyEvent.VK_LEFT)
{
x=x-1;
setLocation(x,y);
if(x<=0)
{
x=1024;
}
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
while(i==KeyEvent.VK_DOWN)
{
y=y+1;
setLocation(x,y);
if(y>=768)
{
y=0;
}
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
while(i==KeyEvent.VK_UP)
{
y=y-1;
setLocation(x,y);
if(y<=0)
{
y=768;
}
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
} public void keyReleased(KeyEvent e) {
} public void keyTyped(KeyEvent e) {
} }//为什么按下一个方向键时,小球就移动,按其它的方向键时就没有反应了呢????求高手解答。如何改???
为什么要用while判断,应该使用 if 判断
我在里面设置if(i!=KeyEvent.VK_LEFT)break;
但是还是没有反应?
那你应该设置一个标识,在Release的时候将标识设置为false。并且在每次移动的时候判断一下该标识,如果false,就break
import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Dest extends Applet implements KeyListener
{
int x,y;
int w=0;
public void start()
{
x=100;
y=100;
}
public void init()
{
this.addKeyListener(this);
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillOval(x,y,10,10);
if(w==2)
{
if(x>=1024)
x=0;
else x=x+3;
try
{
Thread.sleep(20);
}
catch(InterruptedException e)
{
return;
}
repaint();
} if(w==3)
{
if(y<=0)
y=768;
else y=y-3;
try
{
Thread.sleep(20);
}
catch(InterruptedException e)
{
return;
}
repaint();
}
if(w==4)
{
if(y>=768)
y=0;
else y=y+3;
try
{
Thread.sleep(20);
}
catch(InterruptedException e)
{
return;
}
repaint();
}
}
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode())
{
case KeyEvent.VK_LEFT:
if(w==1)
{
if(x<=0)
x=1024;
else x=x-3;
try
{
Thread.sleep(20);
}
catch(InterruptedException k)
{
return;
}
repaint();
}
repaint();
break;
case KeyEvent.VK_RIGHT:
w=2;
repaint();
break;
case KeyEvent.VK_UP:
w=3;
repaint();
break;
case KeyEvent.VK_DOWN:
w=4;
repaint();
break;
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}
{
if(x<=0)
x=1024;
else x=x-3;
try
{
Thread.sleep(20);
}
catch(InterruptedException k)
{
return;
}
repaint();
}
switch case语句.
比如:
switch (e.getKeyCode())
{
case KeyEvent.VK_RIGHT:
//处理向右移动的代码
break;
case KeyEvent.VK_Left:
break;
...
}
楼主使用while循环表示你对事件响应的理解不够,当你点击键盘方向健后,系统响应事件处理程序,
当你再次点击是,系统会再次响应的,系统通过e.getKeyCode()可以判断每次响应的具体键.从而决
定如何处理响应.
java事件处理使用了Observer(监听者)模式,是存java的oo的模式应用.楼主可以看看java设计模式中对于他的讲解.