import java.awt.EventQueue; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JFrame; public class P { private JFrame frame; // 全局的位置变量,用于表示鼠标在窗口上的位置 static Point origin = new Point(); /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { P window = new P(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public P() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 380, 290); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); frame.setLocationRelativeTo(null); frame.setUndecorated(true); frame.addMouseListener(new MouseAdapter() { // 按下(mousePressed 不是点击,而是鼠标被按下没有抬起) public void mousePressed(MouseEvent e) { // 当鼠标按下的时候获得窗口当前的位置 origin.x = e.getX(); origin.y = e.getY(); } }); frame.addMouseMotionListener(new MouseMotionAdapter() { // 拖动(mouseDragged 指的不是鼠标在窗口中移动,而是用鼠标拖动) public void mouseDragged(MouseEvent e) { // 当鼠标拖动时获取窗口当前位置 Point p = frame.getLocation(); // 设置窗口的位置 // 窗口当前的位置 + 鼠标当前在窗口的位置 - 鼠标按下的时候在窗口的位置 frame.setLocation(p.x + e.getX() - origin.x, p.y + e.getY()- origin.y); } }); } }