跟踪鼠标移动

Tracking the mouse movement

我正在尝试制作一个程序来跟踪鼠标移动并将鼠标的当前点显示到标签中,但是当我 运行 我的代码在 Jlabel

我使用的代码是这样的:

public class pr1 extends JFrame implements MouseMotionListener
{
   String Name;
   JLabel PositionLabel;
   Container cp;
   float XPosition;
   float YPosition;
   Point Point;

  public pr1 (String Name)
  {
    super (Name);
    setLayout(new FlowLayout ());
    setBackground(Color.LIGHT_GRAY);
    setSize(500, 500);
    setVisible(true);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    PositionLabel = new JLabel ("The mouse now at the point : " );
    cp = getContentPane();
    cp.add (PositionLabel, BorderLayout.SOUTH);
  }

  @Override
  public void mouseMoved(MouseEvent e)  
  {
    Point = e.getPoint();
    PositionLabel.setText("The mouse now at the point : " + Point );
  }   

  @Override
  public void mouseDragged(MouseEvent e) 
  {
    throw new UnsupportedOperationException("Not supported yet."); 
  }
}

您必须使用 addMouseMotionListener() 注册该组件。
在构造函数中添加:

addMouseMotionListener(this);

您可以在以下位置查看示例: How to Write a Mouse-Motion Listener

前几天我遇到了同样的问题。利用方法 myComponent.getMousePosition() 获取鼠标的位置(在您的情况下,您可能希望将 JPanel 添加到框架,然后将 JLabel 添加到面板。)。

您可以使用带有计时器的方法:

Timer t = new Timer(1, e->{
    if(myPanel.getMousePosition() != null)
        myLable.setText("The mouse now at point: " + myPanel.getMousePosition().getX() + ", " + myPanel.getMousePosition().getY());
});
t.start();

注意如果鼠标不在组件上,getMousePosition()会returnnull