图像在小程序中没有移动

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;
    }

}

希望这会有所帮助。