问什么我在用paint(Graphics g) 画直线的时候,直线与鼠标的位置总是差一段?
具体说就是 我用鼠标画直线,鼠标点第一次获得直线的第一个点,移动到另一处松开鼠标获得第二个点。但为什么画出的直线并不是我鼠标所走的路线呢? 总是和鼠标有一段小距离。

解决方案 »

  1.   

    应该是和鼠标的热点hotspot有关吧,至于什么是鼠标热点可参考http://topic.csdn.net/u/20080627/06/166d0be4-4ed2-417e-b026-b99b839ccb92.html
      

  2.   

    楼主可利用java.awt.Toolkit中的createCustomCursor方法创建自定义鼠标,把热点自己设置一下应该就可以了
    public Cursor createCustomCursor(Image cursor,
                                     Point hotSpot,
                                     String name)
                              throws IndexOutOfBoundsException,
                                     HeadlessException创建一个新的自定义光标对象。如果要显示的图像无效,则隐藏光标(使其完全透明),并将热点 (hotspot) 设置为(0,0)。 
    注意,多帧图像是无效的,可能造成此方法被挂起。 
    参数:
    cursor - 激活光标时要显示的图像
    hotSpot - 大光标热点的 X 和 Y 坐标;hotSpot 值必须小于 getBestCursorSize 返回的 Dimension
    name - 光标的本地化描述,用于 Java Accessibility 
    抛出: 
    IndexOutOfBoundsException - 如果 hotSpot 值超出光标边界 
    HeadlessException - 如果 GraphicsEnvironment.isHeadless() 返回 true
    从以下版本开始: 
    1.2 
    另请参见:
    GraphicsEnvironment.isHeadless()
      

  3.   

    代码改一下,contentPane和JFrame的size是不同的,你差的那部分是frame的size减去contentPane的size的大小        /*Container contentPane=getContentPane();
            contentPane.addMouseListener(this);
            contentPane.addMouseMotionListener(this); */
            this.addMouseListener(this);
            this.addMouseMotionListener(this);