动画中KeyListener的问题

时间:2014-06-04 05:57:07

标签: java swing animation compiler-errors keylistener

我正在尝试使用ActionListenerKeyListener制作一个简单的动画     这将采用键盘输入,即箭头键。     问题是程序没有使用KeyListener进行编译。有人可以请     阐明为什么并可能提供解决方案的帮助。     谢谢!

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Planegame extends JPanel implements ActionListener, KeyListener
{   //^^ this line is giving me trouble^^^^

Timer tim = new Timer(20, this);
int x = 0, y = 0, velX = 0, velY = 0;
public Planegame()
{
    tim.start();         //this will start my animation
    addKeyListener(this);   // will activate the keylistner to watch key press   
    setFocusable(true);
    setFocusTraversalKeysEnabled(false);  //disables shift and tab key
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.GREEN);
    g.fillOval(x, y, 10, 10);
}

public void actionPerformed(ActionEvent e)     
{
    x = x + 10;  //velX 
    y = y + velY;
    repaint();
}

public void keyPressed(KeyEvent e)
{
    if(e.getKeyCode()==38) 
    {
        velY = 1;
    }
    if(e.getKeyCode()==40)
    {
        velY = -1;
    }
    if (e.getKeyCode()==32)   //booster power
    {
        velX = 3;
    }
}

public void keyTyped(KeyEvent e) {}

public void keyReleased(keyEvent e) {}

public static void main(String[] args)
{
    PlaneGame zed = new PlaneGame();
    JFrame k = new JFrame();
    k.setTitle("game");
    k.setSize(600,400);
    k.setVisible(true);
    k.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    k.add(zed);
}
}

1 个答案:

答案 0 :(得分:5)

您在keyReleased方法的声明中有一个拼写错误...

public void keyReleased(keyEvent e) {

请记住,Java区分大小写,应该是......

public void keyReleased(KeyEvent e) {

请注意K

中的大写KeyEvent

您希望考虑对您认为自己重写的方法使用@Override注释,这会在您犯了某种错误时提醒您,例如

@Override
public void keyReleased(KeyEvent e) {

也没有理由paintComponent应该是public,你从不想让你的组件之外的某个人称之为<{p>}

与往常一样,我建议使用key bindings而不是KeyListener,因为它们可以更好地控制您的组件触发关键事件所需的关注程度