You need to drag the button while holding ctrl. I am writing such a code, the button moves with blinking and duality (that is, the same button appears at a certain moment, but in a different place), and the mouse moves far ahead of the button, and the button moves as if behind it. I can not understand what the error is, on many sites they write that when you move a button it is necessary to take away the current from its previous coordinates, but then if I write it this way does not move at all.
public class Mouse extends JFrame{ private JPanel mainPanel; private JButton button1; private JPanel showPanel; private JTextField textField1; private static int xPosition,lastX; private static int yPosition,lastY; private static boolean flag=false,flag1=false; public Mouse(){ super("Mouse Application"); setLocation(450,145); setSize(300, 300); setContentPane(mainPanel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); showPanel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked(e); button1.setLocation(e.getX(),e.getY()); repaint(); } }); showPanel.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseMoved(MouseEvent e) { super.mouseMoved(e); xPosition=e.getX(); yPosition=e.getY(); textField1.setText("x: "+xPosition+" y: "+yPosition); repaint(); } }); setVisible(true); button1.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { super.keyPressed(e); flag=e.isControlDown(); } }); button1.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { super.mousePressed(e); if(flag) { flag1 = true; lastX=e.getX(); lastY=e.getY(); } } }); button1.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { super.mouseReleased(e); flag=false; flag1=false; } }); /*button1.addMouseListener(new MouseAdapter() { @Override public void mouseDragged(MouseEvent e) { super.mouseDragged(e); if(flag1){ button1.setLocation(lastX-e.getX(),lastY-e.getY()); lastX=e.getX(); lastY=e.getY(); } } });*/ button1.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { super.mouseDragged(e); if(flag1){ button1.setLocation(e.getX(),e.getY()); //lastX=e.getX(); //lastY=e.getY(); repaint(); } } }); } public static void main(String[] args) { new Mouse(); } }