Java 每次鼠标移动时获取鼠标坐标

Java 每次鼠标移动时获取鼠标坐标,java,swing,mouselistener,Java,Swing,Mouselistener,所以我有这个代码,但我不明白如何设置鼠标坐标的标签,每次鼠标移动 timer.schedule(new TimerTask() { @Override public void run() { int mouseX = MouseInfo.getPointerInfo().getLocation().x; int mouseY = MouseInfo.getPointerInfo().getLocation().y; lblInfo

所以我有这个代码,但我不明白如何设置鼠标坐标的标签,每次鼠标移动

timer.schedule(new TimerTask() {

    @Override
    public void run() {
        int mouseX = MouseInfo.getPointerInfo().getLocation().x;
        int mouseY = MouseInfo.getPointerInfo().getLocation().y;
        lblInfo.setText("Nada "+mouseX+mouseY);
    }

}, 1);
我甚至不确定代码是否正确,但我想让它做的是每次鼠标移动时都在名为lblInfo的标签中获取鼠标坐标


这段代码只在程序启动时显示一次

您需要
实现MouseMotionListener
,然后在
mouseMoved
方法中添加逻辑,如:

public class MyClass implements MouseMotionListener {

    public void mouseMoved(MouseEvent e) {
       System.out.println("X : " + e.getX());
       System.out.println("Y : " + e.getY());
    }

    public void mouseDragged(MouseEvent e) {
       //do something
    }

}

阅读更多关于

的信息,看看这个例子。首先需要实现
mousedpressed
,然后实现
mouseDragged
。首先获取初始按下点,然后鼠标标记将使用这些坐标

addMouseListener(new MouseAdapter() {
     public void mousePressed(MouseEvent me) {
         // Get x,y and store them
         pX = me.getX();
         pY = me.getY();
     }
});
addMouseMotionListener(new MouseAdapter() {
     public void mouseDragged(MouseEvent me) {
         frame.setLocation(frame.getLocation().x + me.getX() - pX, 
              frame.getLocation().y + me.getY() - pY);
     }
});
完整的运行示例。它使用一个未装饰的框架并创建一个
JPanel
作为标题,您可以拖动它来移动框架

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.LineBorder;

public class UndecoratedExample {
    static JFrame frame = new JFrame();
    static class MainPanel extends JPanel {
        public MainPanel() {
            setBackground(Color.gray);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(400, 400);
        }
    }

    static class BorderPanel extends JPanel {

        JLabel stackLabel;
        int pX, pY;

        public BorderPanel() {
            ImageIcon icon = new ImageIcon(getClass().getResource(
                    "/resources/stackoverflow1.png"));
            stackLabel = new JLabel();
            stackLabel.setIcon(icon);

            setBackground(Color.black);
            setLayout(new FlowLayout(FlowLayout.RIGHT));

            add(stackLabel);

            stackLabel.addMouseListener(new MouseAdapter() {
                public void mouseReleased(MouseEvent e) {
                    System.exit(0);
                }
            });
            addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent me) {
                    // Get x,y and store them
                    pX = me.getX();
                    pY = me.getY();
                }
            });
            addMouseMotionListener(new MouseAdapter() {
                public void mouseDragged(MouseEvent me) {
                    frame.setLocation(frame.getLocation().x + me.getX() - pX, 
                            frame.getLocation().y + me.getY() - pY);
                }
            });
        }
    }

    static class OutsidePanel extends JPanel {

        public OutsidePanel() {
            setLayout(new BorderLayout());
            add(new MainPanel(), BorderLayout.CENTER);
            add(new BorderPanel(), BorderLayout.PAGE_START);
            setBorder(new LineBorder(Color.BLACK, 5));
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {

                frame.setUndecorated(true);
                frame.add(new OutsidePanel());
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

查看run()方法的执行频率?添加一个println()来查看。这就是问题所在,我有一个继承MouseMotionListener的Extended MouseAdapter(如果我没记错的话),但是我如何告诉它在每次鼠标移动时设置坐标呢。例如,每次在JPanel内按下鼠标时,我都可以得到坐标,但不是屏幕上的所有位置。我用的是mouseClicked,效果很好。。。但无法找到正确的事件,使其在每次鼠标移动时更新坐标,并且移动的鼠标似乎不起作用omg…public void mouseMoved(MouseEvent e){int mouseX=e.getX();int mouseY=e.getY();System.out.println(“测试信息:+mouseX+”+mouseY);igu.lblInfo.setText(“测试信息:+mouseX+”+mouseY”)},mouseMoved不会执行此操作“当鼠标光标移动到组件上但未按下任何按钮时调用”。我不知道为什么…doh nvm im dumb xD而不是添加addMouseMotionListener();我用了addMouseListener();谢谢你的帮助:D