3

在下面的代码中,我只是使用鼠标侦听器来获取鼠标的 XY 坐标,然后调用重绘。在paint 方法中,我使用相同的XY 坐标作为位置绘制了一个矩形。矩形确实跟随但距离鼠标指针有一段距离。我希望矩形的左上角可以触摸鼠标指针。

难道我做错了什么?

为什么我的鼠标指针和 Rectangle 对象之间有距离?

public void mouseMoved(MouseEvent e){
    x = e.getX();
    y = e.getY();

    repaint();
}

public class Canvas extends JPanel{
    Canvas(){}

    public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.red);
        g2.fillRect(x, y, 50, 50);          
    }
}
4

1 回答 1

4
  1. 不要调用您的类 Canvas,该名称有一个 AWT 组件,因此它会变得混乱。

  2. 自定义绘画是通过覆盖 JPanel 的 paintComponent() 方法而不是 paint() 方法来完成的。

  3. 您没有显示将 MouseListener 添加到面板的位置。您可能正在将其添加到框架中。

如果您需要更多帮助,请发布您的SSCCE来证明问题。

于 2011-11-24T19:33:11.043 回答