Как работает public void keyTyped(KeyEvent e)?

Хочу поставить клик на пробел, но keyTyped(KeyEvent e) на него не реагирует. Для теста поставил на пробел вывод фразы в консоль. Не выводит. 2 оставшихся имплементированных метода работают исправно.

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

// Панель, на которой буду рисовать игру. Помещаю на фрейм

public class GamePanel extends JPanel implements ActionListener {

    public static final int WIDTH = 1200;    // Размеры панели - ширина
    public static final int HEIGHT = 700;   // Размеры панели - высота
    Timer mainTimer = new Timer(30, this); // Главный таймер, по которому будет обновляться и перерисовываться панель

    Image backImage = new ImageIcon("src/img/Panel.png").getImage();
    Player player = new Player();
    EnemyCrafter enemyCrafter = new EnemyCrafter();



    public GamePanel(){             // При создании панели в конструкторе запускается счетчик, при каждом тиканье которого происходит всякое
        mainTimer.start();
        setFocusable(true);
        addKeyListener(new KeyActionListener());
        enemyCrafter.thread.start();

    }
    @Override
    public  void paint (Graphics g){
        g = (Graphics2D) g;
        g.drawImage(backImage, 0,0, null);
        g.drawImage(player.serg, player.x, player.y, null);

        for (int i = 0; i< EnemyCrafter.enemies.size(); i++ ){
            EnemyCrafter.enemies.get(i).move();
            g.drawImage(EnemyCrafter.enemies.get(i).image, EnemyCrafter.enemies.get(i).x,
                    EnemyCrafter.enemies.get(i).y, null);
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) { // На каждое изменение счетчика вызывается метод move()
                                                // и перерисовывается метод paint()
        player.move();
        repaint();
        for (int i = 0; i< EnemyCrafter.enemies.size(); i++ ){
            EnemyCrafter.enemies.get(i).move();
        }
        collisionWithEnemy();
        collisionEnemy();
        }

    private void collisionWithEnemy() {
        Random random = new Random();
        for (int i=0; i<EnemyCrafter.enemies.size(); i++){
            if (player.getRectangle().intersects(EnemyCrafter.enemies.get(i).getRectangle())) {
                EnemyCrafter.enemies.get(i).dx = random.nextInt(20) - 10;
                EnemyCrafter.enemies.get(i).dy = random.nextInt(20) - 10;
                EnemyCrafter.enemies.get(i).image=EnemyCrafter.enemies.get(i).imageKnock;
            }  else if (!player.getRectangle().intersects(EnemyCrafter.enemies.get(i).getRectangle())){
                EnemyCrafter.enemies.get(i).image=EnemyCrafter.enemies.get(i).imageNormal;
            }
        }
}

    private void collisionEnemy() { // Столкновение врагов друг с другом
        Random random = new Random();
        for (int i = 0; i < EnemyCrafter.enemies.size(); i++) {
            for (int j = 0; j < i; j++) {
                if (EnemyCrafter.enemies.get(j).getRectangle().intersects(EnemyCrafter.enemies.get(i).getRectangle())) {
                    EnemyCrafter.enemies.get(j).dx = random.nextInt(20) - 10;
                    EnemyCrafter.enemies.get(i).dy = random.nextInt(20) - 10;
                    EnemyCrafter.enemies.get(i).image=EnemyCrafter.enemies.get(i).imageKnock;
                    EnemyCrafter.enemies.get(j).image=EnemyCrafter.enemies.get(j).imageKnock;
                }
            }
        }
    }
    private class KeyActionListener implements KeyListener {
        @Override
        public void keyTyped(KeyEvent e) {
            // TODO поставить пробел на пинок
            if(e.getKeyCode()==KeyEvent.VK_SPACE){ //WTF? Почему не выводит?
                System.out.println("Test");
            }
        }
        @Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode()== KeyEvent.VK_D){
                player.dx=5;
            } else if (e.getKeyCode()==KeyEvent.VK_A){
                player.dx=-5;
            } else if (e.getKeyCode()==KeyEvent.VK_W){
                player.dy=5;
            } else if (e.getKeyCode()==KeyEvent.VK_S){
                player.dy=-5;
            }
        }
        @Override
        public void keyReleased(KeyEvent e) {
            if(e.getKeyCode()== KeyEvent.VK_D){
                player.dx=0;
            } else if (e.getKeyCode()==KeyEvent.VK_A){
                player.dx=0;
            } else if (e.getKeyCode()==KeyEvent.VK_W){
                player.dy=0;
            } else if (e.getKeyCode()==KeyEvent.VK_S){
                player.dy=0;
            }
        }
    }
}

Ответы (0 шт):