¿Como lograr que un botón se desplaza con un MouseListener?


21 de Febrero del 2020

Cuento con un panel el cual contiene un botón lo que quiero logra hacer es que cuando el cursor del mouse se acerque a dicho botón este se mueva de posición para que al usuario le sea imposible tocarlo y una vez que el cursor del mouse sale del panel el botón regrese a su posición inicial ya logro mover el botón de posiciones a posiciones aleatorias el problema es que cuando el cursor entra al panel el botón se mueve inmediatamente aunque el cursor no se encuentre cercas de el como corrijo esto. Dejo el código que llevo al momento:

public class Crazy_butt {

public class Crazy_butt {

//Interfaz grafica de usuario

    private JFrame ventana;
    private JPanel panelC;
    private JButton bot1;
    private int x,y;
    Random alea;
// Consrructor que inicializa los componentes

    public Crazy_butt() {

        ventana = new JFrame();
        panelC = new JPanel();
        bot1 = new JButton();
        alea = new Random();
        this.atributos();
        this.armado();
        this.ecuchas();
        this.lanazar_IGU();
    }

    // Atributos de los componentes
    public void atributos() {
        ventana.setSize(500, 500);
        ventana.setResizable(true);
        panelC.setLayout(null);
        bot1.setText("tocame");
        bot1.setBounds(190, 190, 100, 40);
    }

    public void armado() {

        ventana.add(panelC);
        panelC.add(bot1);

    }

    // Asignar los escuchas
    public void ecuchas() {
        Escucha_Raton esc = new Escucha_Raton();
        panelC.addMouseListener(esc);
//        bot1.addActionListener(esc);
    }

    public void lanazar_IGU() {
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ventana.setLocationRelativeTo(null);
        ventana.setVisible(true);
    }

    class Escucha_Raton implements MouseListener {

        @Override
        public void mouseClicked(MouseEvent e) {
        }

        @Override
        public void mousePressed(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

        @Override
        public void mouseEntered(MouseEvent e) {
               x = alea.nextInt(400);
               y= alea.nextInt(400);
               bot1.setBounds(x,y,100,40);
        }

        @Override
        public void mouseExited(MouseEvent e) {
            bot1.setBounds(190,190,100,40);
        }
    }
}