类扩展JPanel实现KeyListener对按下的键没有响应

时间:2014-03-13 20:39:48

标签: jpanel key keylistener pressed

我已经尝试了很多东西,但我无法让关键听众工作!我已经在构造函数中将关键监听器添加到了类中,但它仍然没有用。 请帮帮我!

这是Frame.java

import javax.swing.JFrame;

public class Frame {

    public static void main(String[] args) throws Exception{
        JFrame jf = new JFrame();
        Panel panel = new Panel();
        jf.setTitle("Gravity Ball");
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(1366, 768);
        jf.setResizable(false);
        jf.add(panel);

    }

}

Panel.java:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Panel extends JPanel implements ActionListener, KeyListener{

    Timer t = new Timer(5, this);

    double gravity = 0.04;
    double tvel = 7.3;
    double speed = 0;
    double y = 0;

    public Panel(){
        t.start();
        addKeyListener(this);
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(new Color(0, 204, 255));
        g.fillRect(0, 0, 1366, 768);
        g.setColor(Color.WHITE);
        g.fillOval(658, (int) y,  50,  50);
    }

    public void actionPerformed(ActionEvent e) {
        speed = speed + gravity;
        if (speed > tvel){
            speed = tvel;
        }
        if (y >= 693){
            speed = - speed / 1.2;
        }

        y = y + speed;
        repaint();

    }

    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_SPACE){
            System.out.println("SPACE");
        }
    }

    public void keyReleased(KeyEvent e) {

    }

    public void keyTyped(KeyEvent e) {

    }

}

0 个答案:

没有答案