2014-01-14 72 views
0

我使用java.awt.Polygon在Java中绘制了一个多边形。我想用鼠标移动多边形(我想拖动它)。我知道我必须在addMouseMotionListener中使用mouseDragged方法。这样我就可以知道鼠标拖动多边形的路径的坐标(x,y)。如何拖动多边形?

但问题是,我不知道如何处理采集的(x,y)来移动多边形。这是代码的一部分:

public void mouseListeners(DrawEverything det) { 
    det.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { 
     public void mouseDragged(java.awt.event.MouseEvent evt) { 

      if(isMouseInMe(evt.getX(), evt.getY())){//this "if" checks if the cursor is in the shape when we drag it 

       int xTmep , yTemp ; 
       xTmep = (int) (evt.getX() - xMousePressed) ;//xMousePressed--> the x position of the mouse when pressed on the shape 
       yTemp = (int) (evt.getY() - yMousePressed) ; 

       for(int i = 0 ; i < nPoints ; ++i){ 
        xPoints[i] += xTmep;//array of x-positions of the points of polygon 
        yPoints[i] += yTemp; 
       } 
      } 
     } 
    }); 

这部分是我遇到的麻烦主要部分:

for(int i = 0 ; i < nPoints ; ++i){ 
    xPoints[i] += xTmep; 
    yPoints[i] += yTemp; 
} 

回答

2

看起来好像要添加鼠标的当前位置之间的差异多边形的位置与每个框架上多边形的新位置。你想要做的只是添加鼠标的新位置和最后一次调用mouseDragged()时的位置之间的差异。

你可以很容易地做到这一点。您for循环后,添加以下内容:

xMousePressed = evt.getX(); 
yMousePressed = evt.getY(); 

那么下一次mouseDragged()被调用时,它会相对位置多边形的更新到其前一帧位置。

+0

非常感谢你,它像一个魅力工作。 – gandalf