You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX如何在应用启动时获取鼠标位置?

应用启动时获取鼠标位置的解决方案

针对不同技术栈,以下是直接在应用启动时获取鼠标位置并同步元素位置的实用方案:

前端(JavaScript/浏览器环境)

浏览器没有直接提供启动时获取鼠标位置的API,但可以通过全屏透明覆盖层的技巧捕获初始位置,结合常规鼠标移动监听实现元素跟随:

window.addEventListener('DOMContentLoaded', () => {
  // 创建全屏透明覆盖层,用于捕获初始鼠标位置
  const overlay = document.createElement('div');
  overlay.style.cssText = 'position: fixed; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; z-index: 9999;';
  document.body.appendChild(overlay);

  const setInitialPos = (e) => {
    const followImg = document.getElementById('follow-img');
    // 设置图片位置(减去图片半宽半高,让中心对齐鼠标)
    followImg.style.left = `${e.clientX - followImg.offsetWidth/2}px`;
    followImg.style.top = `${e.clientY - followImg.offsetHeight/2}px`;
    // 完成后移除覆盖层和监听
    overlay.removeEventListener('mouseenter', setInitialPos);
    document.body.removeChild(overlay);
  };

  overlay.addEventListener('mouseenter', setInitialPos);

  // 常规鼠标移动监听,持续更新位置
  document.addEventListener('mousemove', (e) => {
    const followImg = document.getElementById('follow-img');
    followImg.style.left = `${e.clientX - followImg.offsetWidth/2}px`;
    followImg.style.top = `${e.clientY - followImg.offsetHeight/2}px`;
  });
});

Python(PyQt/PySide 桌面应用)

PyQt/PySide提供了直接获取全局鼠标位置的API,无需等待事件触发,启动时即可调用:

from PyQt5.QtWidgets import QApplication, QLabel, QWidget
from PyQt5.QtGui import QCursor
import sys

class MouseFollowWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("鼠标跟随图片")
        self.resize(800, 600)
        
        # 初始化跟随图片
        self.img_label = QLabel(self)
        self.img_label.setPixmap("your-image.png")
        self.img_label.setFixedSize(50, 50)
        
        # 启动时直接获取鼠标位置并设置图片位置
        self.update_img_pos()
        
        # 开启鼠标追踪,无需点击即可响应移动事件
        self.setMouseTracking(True)
    
    def mouseMoveEvent(self, event):
        # 鼠标移动时更新位置
        self.update_img_pos(event.globalPos())
    
    def update_img_pos(self, pos=None):
        # 若未传入位置,直接获取当前全局鼠标坐标
        if not pos:
            pos = QCursor.pos()
        # 转换为窗口内坐标,让图片中心对齐鼠标
        window_pos = self.mapFromGlobal(pos)
        self.img_label.move(window_pos.x() - 25, window_pos.y() - 25)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MouseFollowWindow()
    window.show()
    sys.exit(app.exec_())

Java(Swing 桌面应用)

Swing通过MouseInfo工具类直接获取当前鼠标位置,应用初始化阶段即可调用:

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

public class MouseFollowApp extends JFrame implements MouseMotionListener {
    private JLabel imgLabel;

    public MouseFollowApp() {
        setTitle("鼠标跟随图片");
        setSize(800, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(null);
        
        // 初始化跟随图片
        imgLabel = new JLabel(new ImageIcon("your-image.png"));
        imgLabel.setSize(50, 50);
        add(imgLabel);
        
        // 启动时设置图片初始位置
        updateImgPosition();
        
        // 添加鼠标移动监听
        addMouseMotionListener(this);
        setVisible(true);
    }

    private void updateImgPosition() {
        // 获取全局鼠标坐标
        Point mouseScreenPos = MouseInfo.getPointerInfo().getLocation();
        // 转换为窗口内坐标,让图片中心对齐鼠标
        Point windowPos = SwingUtilities.convertPointFromScreen(mouseScreenPos, this);
        imgLabel.setLocation(windowPos.x - 25, windowPos.y - 25);
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        updateImgPosition();
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        updateImgPosition();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(MouseFollowApp::new);
    }
}

内容的提问来源于stack exchange,提问作者ILikeTrains

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:41:56