各位前辈好: 
我在运行的界面上拖动一个按钮到任意位置,用了e.getpoing()获取了鼠标位置,然后setlocation()这个位置,但实际效果不是鼠标移动到的地方,是不是需要坐标转换? 这个问题有什么解决的办法吗,实验了好多次,都不能达到效果,是不是坐标转换之类的问题,头疼中,求大家帮忙拉  还有,有没有什么控件,在运行时就是可以随意拖动的呀?

解决方案 »

  1.   

    我在做单机的四国军旗游戏时,碰到了类似的问题,点击一个棋子时,得到的是另外一个棋子,后来我才发现,是由于我使用了g.translate(x,y);移动了系统原点,但是事件没有移动!不知你是否是这种情况吗?
      

  2.   

    e.getPoint()是指你的鼠标在被拖动得按钮中得位置.
    而setLocation()是指面板中得位置, 2个位置自然不一样得.
    需要变换一下得.
    而且按钮跟着你的鼠标动和不跟鼠标动, 最后released得时候才移动, 做法也不一样得.
    跟着鼠标动:
    记下Pressed时候Point. 
    在dragged里面, 拿到新的Point, 两个Point之差就是位移. 然后setLocation=getLocation+位移.
    不过这个方法在鼠标快速移动得时候可能会失效, 因为dragged需要鼠标一直在按钮得区域中.
    不跟鼠标动
    released时候拿到point, 用getLocation和point计算一下新的location, 设置就行了, 这个简单, 但是不是太友好.
    更复杂得做法是: dragged得时候按钮不动, 但是在panel上描画一个按钮得虚框在动, released得时候按钮才动...