Расширение класса JPanel, реализующее KeyListener, не реагирует на нажатие клавиши
Я попробовал почти все, но не могу заставить работать ключевого слушателя! Я добавил ключевой слушатель к классу в конструкторе, но все равно это не хорошо. Пожалуйста, помогите мне!
Это 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) {
}
}