Java - 相对于 JFrame 的光标位置

标签 java swing jframe mouse

尝试使用以下方法让对象跟随光标:

int mx =(int) MouseInfo.getPointerInfo().getLocation().getX()-50;
Player.setX(mx);

在我的勾选方法中。但是,这会返回屏幕上的光标位置,如何使其相对于 JFrame 本身?有没有办法读取 Canvas 中左上角点的位置,以便我可以添加偏移量?

最佳答案

创建一个鼠标监听器,并从那里获取坐标:

public class SimpleFrame extends JFrame {
public static void main(String[] args) {
    SimpleFrame frame = new SimpleFrame();
    frame.setSize(new Dimension(200, 300));
    frame.setLocation(new Point(500, 600));
    frame.setVisible(true);
    frame.addMouseListener(new MouseListener() {
        @Override
        public void mouseReleased(MouseEvent e) {
            System.out.println(e.getX() + " / " + e.getY());
        }
        @Override
        public void mousePressed(MouseEvent e) {
        }
        @Override
        public void mouseExited(MouseEvent e) {
        }
        @Override
        public void mouseEntered(MouseEvent e) {
        }
        @Override
        public void mouseClicked(MouseEvent e) {
        }
    });
}
}

当您对此进行测试时,您可能会意识到您希望获得相对于其他内容的坐标,例如应用程序的主面板。然后为该组件创建鼠标监听器:

SimpleFrame frame = new SimpleFrame();
JPanel mainPanel = new JPanel();
frame.add(mainPanel, ...);
mainPanel.addMouseListener(...

这样做比从 JFrame 的 mouseListener 获得的坐标中减去常量要好得多,因为这些“常量”会根据操作系统等而有所不同。

如果您希望在用户移动鼠标时发生事件,而不仅仅是在他/她单击鼠标时发生事件,请使用:

    frame.addMouseMotionListener(new MouseMotionListener() {
        @Override
        public void mouseMoved(MouseEvent e) {
            System.out.println(e.getX() + " / " + e.getY());
        }
        @Override
        public void mouseDragged(MouseEvent e) {
    });

关于Java - 相对于 JFrame 的光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60910908/

相关文章:

java - 如何在 java 中将 Collection<char[]> 转换为 char[][]?

java - 如何在java中读取大尺寸csv文件并将每一行拆分为字符串数组

java - Google 应用引擎无法创建 DevAppServer

java - 如何在 Java 中使用双位代码和 doubleToLongBits()?

java - 在游戏中聚焦窗口而不最小化游戏

java - JScrollPane 未正确更新

java - 如何设置 jComponent 在手动调整大小时自动获取父级大小?

java - 从 main 实现和调用 JFrame/ActionListener 类

java - 使用可变数量的 JLabel 创建 JFrame

java - 如何添加带有按钮的新 JFrame?