KeyEvent not responding in Java?

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.util.concurrent.ThreadLocalRandom;

public class Game {

    public static void main(String[] args) {
        new Game().start();
    }

    public void start() {
        Board board = new Board();
        board.add(new Circle(100, 100, new Dimension(50, 50)));

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(800, 600);
        frame.setContentPane(board);
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image image = toolkit.getImage("sprites/cursor.png");
        Cursor c = toolkit.createCustomCursor(image, new Point(frame.getX(), frame.getY()), "img");
        // make a circle object and click
        frame.setCursor(c);
        frame.setVisible(true);
    }
}

class Board extends JPanel {
    Board() {
        super(null);
    }
}

class Circle extends JComponent {
    Circle(int x, int y, Dimension size) {
        setBounds(new Rectangle(new Point(x, y), size));

        addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
                

            }

            @Override
            public void keyPressed(KeyEvent e) {
                int keyCode = e.getKeyCode();
                switch(keyCode) {
                    case KeyEvent.VK_Z: 
                        move();
                        break;
                }

            }

            @Override
            public void keyReleased(KeyEvent e) {
                

            }

        });

        /*addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                move();
            }
        });*/
    }

    private void move() {
        Container board = SwingUtilities.getAncestorOfClass(JPanel.class, this);
        setLocation(new Point(
            ThreadLocalRandom.current().nextInt(board.getWidth() - 20),
            ThreadLocalRandom.current().nextInt(board.getHeight() - 20)
        ));
    }

    @Override
    protected void paintComponent(Graphics g) {
        g.setColor(Color.RED);
        g.fillOval(0, 0, getWidth(), getHeight());
    }
}

This is currently all my code. What I want to do is that when I click z on the red point, it makes goes to another location. It worked with the MouseEvent but now it doesn’t work with the KeyEvent. I’m also new to Java so I might not know some stuff.