如何拖动多边形?

Posted

技术标签:

【中文标题】如何拖动多边形?【英文标题】:How to drag a polygon? 【发布时间】:2014-02-02 18:33:54 【问题描述】:

我使用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;

【问题讨论】:

【参考方案1】:

看起来好像您正在将鼠标当前位置与多边形位置之间的差异添加到多边形在每一帧上的新位置。您要做的只是添加鼠标的新位置与上次调用mouseDragged() 时的位置之间的差异。

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

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

然后下次调用mouseDragged() 时,它将更新多边形相对于其在前一帧中的位置的位置。

【讨论】:

以上是关于如何拖动多边形?的主要内容,如果未能解决你的问题,请参考以下文章

如何使所有绘制的(矩形、圆形、线条、多边形)可拖动?纯JS

标记拖动后,即使多边形线也不会根据标记改变

qt 画多边形(实现鼠标拖动节点)

在 Google 地图中使用 dragListener 可编辑多个多边形

百度地图覆盖物多边形拖动,点击,生成新的覆盖物

百度地图中拖拽地图后,多边形消失的问题