Meu deus eu estou ficando louco com KeyListener em Java

Gente, eu literalmente vi todos os cantos da internet e meu codigo pra KeyListener não tem nenhum erro aparentemente por favor alguem mostra pro cego que eu sou o que esta errado ai:

public class Jogo extends JFrame{

    public Jogo(){
        setSize(800,600);
        setLocationRelativeTo(null);
        setVisible(true);
        setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setFocusable(true);
        Painel p = new Painel();
        add(p);
    }

    public static void main(String[] args) {
     new Jogo();
    }
}
class Painel extends JPanel implements KeyListener{
    BufferedImage imagem;
    public void keyPressed(KeyEvent evt) {
        System.out.println("Pegou");
    }
    public void keyTyped(KeyEvent evt){}
    public void keyReleased(KeyEvent evt){}

    public Painel() {
    setSize(800,600);
    setBackground(Color.blue);
    addKeyListener(this);
    setFocusable(true);
    requestFocusInWindow();
    System.out.println(isFocusable());
    }

    public static void main(String[] args) {
        new Painel();
    }
}

Ou você registra o ouvinte no JFrame ou registra um ouvinte para geral:

public class Painel extends JPanel {

    public Painel() {

        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( new KeyEventDispatcher() {
            
            @Override
            public boolean dispatchKeyEvent( KeyEvent e ) {

                switch ( e.getID() ) {
                    
                    case KeyEvent.KEY_PRESSED:
                        System.out.println( "pressinou" );
                        switch ( e.getKeyCode() ) {
                            case KeyEvent.VK_ESCAPE:
                                System.out.println( "pressionou ESC" );
                                break;
                        }
                        break;
                        
                    case KeyEvent.KEY_RELEASED:
                        System.out.println( "soltou" );
                        break;
                        
                    case KeyEvent.KEY_TYPED:
                        System.out.println( "digitou" );
                        break;
                        
                }

                return false;

            }

        });

    }

}