图像在小程序中没有移动
Image is not moving in applet
我想在小程序中移动一个图片(这里是矩形),小程序画出来了,但是图片为什么不动?没有编译错误!
这是我的代码:
package game;
import java.awt.*;
import javax.swing.*;
import java.applet.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Gamer extends JApplet implements KeyListener
{
private int x=50,y=50;
@Override
public void init( )
{
addKeyListener(this);
}
@Override
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
switch( keyCode )
{
case KeyEvent.VK_UP:
if( y>0 ) //when up key is pressed and the position of the player is not on the edge
{
y=y-19;
repaint();
}
break;
case KeyEvent.VK_DOWN:
if( y<171 ) //when down key is pressed and the position of the player is not on the edge
{
y=y+19;
repaint();
}
break;
case KeyEvent.VK_LEFT:
if( x>0 )
{
x=x-15;
repaint();
}
break;
case KeyEvent.VK_RIGHT:
if( x<285 )
{
x=x+15;
repaint();
}
break;
}
}
@Override
public void paint( Graphics g ) //will draw the background and the character
{
g.fillRect(x, y, 200, 200);
}
@Override
public void keyReleased(KeyEvent arg0)
{
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0)
{
// TODO Auto-generated method stub
}
}
当我按下 up/down/left/write 箭头时,矩形没有移动。
请解释为什么? T.I.A.
问题是您的小程序没有捕捉到 KeyEvent
,因此您的绘画方法没有被调用。
事实上,当您想要将 KeyListener
添加到 JApplet
并且它不起作用时会出现问题。
解决方案是实施 KeyEventDispatcher
而不是 KeyListener
。此外,我将矩形的大小从 200 更改为 20,以便能够更好地看到矩形的移动:
package game;
import java.awt.Graphics;
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import javax.swing.JApplet;
public class Gamer extends JApplet implements KeyEventDispatcher {
private int x = 50, y = 50;
@Override
public void init() {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
}
@Override
public void paint(Graphics g) // will draw the background and the character
{
super.paint(g); // <- added to your code to clear the background
// before re-painting the new square
g.fillRect(x, y, 20, 20);
}
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
int keyCode = e.getKeyCode();
switch( keyCode )
{
case KeyEvent.VK_UP:
if( y>0 ) //when up key is pressed and the position of the player is not on the edge
{
y=y-19;
repaint();
}
break;
case KeyEvent.VK_DOWN:
if( y<171 ) //when down key is pressed and the position of the player is not on the edge
{
y=y+19;
repaint();
}
break;
case KeyEvent.VK_LEFT:
if( x>0 )
{
x=x-15;
repaint();
}
break;
case KeyEvent.VK_RIGHT:
if( x<285 )
{
x=x+15;
repaint();
}
break;
}
return false;
}
}
希望这会有所帮助。
我想在小程序中移动一个图片(这里是矩形),小程序画出来了,但是图片为什么不动?没有编译错误!
这是我的代码:
package game;
import java.awt.*;
import javax.swing.*;
import java.applet.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Gamer extends JApplet implements KeyListener
{
private int x=50,y=50;
@Override
public void init( )
{
addKeyListener(this);
}
@Override
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
switch( keyCode )
{
case KeyEvent.VK_UP:
if( y>0 ) //when up key is pressed and the position of the player is not on the edge
{
y=y-19;
repaint();
}
break;
case KeyEvent.VK_DOWN:
if( y<171 ) //when down key is pressed and the position of the player is not on the edge
{
y=y+19;
repaint();
}
break;
case KeyEvent.VK_LEFT:
if( x>0 )
{
x=x-15;
repaint();
}
break;
case KeyEvent.VK_RIGHT:
if( x<285 )
{
x=x+15;
repaint();
}
break;
}
}
@Override
public void paint( Graphics g ) //will draw the background and the character
{
g.fillRect(x, y, 200, 200);
}
@Override
public void keyReleased(KeyEvent arg0)
{
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0)
{
// TODO Auto-generated method stub
}
}
当我按下 up/down/left/write 箭头时,矩形没有移动。 请解释为什么? T.I.A.
问题是您的小程序没有捕捉到 KeyEvent
,因此您的绘画方法没有被调用。
事实上,当您想要将 KeyListener
添加到 JApplet
并且它不起作用时会出现问题。
解决方案是实施 KeyEventDispatcher
而不是 KeyListener
。此外,我将矩形的大小从 200 更改为 20,以便能够更好地看到矩形的移动:
package game;
import java.awt.Graphics;
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import javax.swing.JApplet;
public class Gamer extends JApplet implements KeyEventDispatcher {
private int x = 50, y = 50;
@Override
public void init() {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
}
@Override
public void paint(Graphics g) // will draw the background and the character
{
super.paint(g); // <- added to your code to clear the background
// before re-painting the new square
g.fillRect(x, y, 20, 20);
}
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
int keyCode = e.getKeyCode();
switch( keyCode )
{
case KeyEvent.VK_UP:
if( y>0 ) //when up key is pressed and the position of the player is not on the edge
{
y=y-19;
repaint();
}
break;
case KeyEvent.VK_DOWN:
if( y<171 ) //when down key is pressed and the position of the player is not on the edge
{
y=y+19;
repaint();
}
break;
case KeyEvent.VK_LEFT:
if( x>0 )
{
x=x-15;
repaint();
}
break;
case KeyEvent.VK_RIGHT:
if( x<285 )
{
x=x+15;
repaint();
}
break;
}
return false;
}
}
希望这会有所帮助。