Нарисуйте треугольник с помощью перетаскивания мышью (как я могу переместить предыдущий нарисованный треугольник с помощью перетаскивания мышью)

Как переместить треугольник в новое место с помощью перетаскивания мышью (который ранее был нарисован с помощью перетаскивания мышью)?

...
java.util.List<Polygon> triangles = new LinkedList<Polygon>();
Point startDrag, endDrag, midPoint;
Polygon triangle;
...
public PaintSurface() {     
  this.addMouseListener(new MouseAdapter() {
  public void mousePressed(MouseEvent e) {
    startDrag = new Point(e.getX(), e.getY());
    endDrag = startDrag;
    repaint();
  }//end mousePressed   

public void mouseReleased(MouseEvent e) {
...
  int[] xs = { startDrag.x, endDrag.x, midPoint.x };
  int[] ys = { startDrag.y, startDrag.y, midPoint.y };      
  triangles.add( new Polygon(xs, ys,3));                    
  startDrag = null;
  endDrag   = null;
  repaint();
 }//end mouseReleased   
...


 });//end addMouseListener

  this.addMouseMotionListener(new MouseMotionAdapter() {

/* Я не знаю, как переместить (перетащить) весь треугольник в новое место, а затем удалить предыдущий нарисованный треугольник. Метод mouseDragged рисует только новый треугольник с помощью перетаскивания мышью :-( */

    public void mouseDragged(MouseEvent e) {
        endDrag = new Point(e.getX(), e.getY());
        repaint();
     }//end mouseDragged
        }//end paintSurface       

         //Draw triangles
         public void paint(Graphics g) {
           Graphics2D g2 = (Graphics2D) g;
           g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

           //draw the thickness of the line
           g2.setStroke(new BasicStroke(1));
           g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.00f));        
           g2.setPaint(Color.black);//set the triangle color 
           for (Polygon triangle : triangles)  g2.drawPolygon(triangle);
             if (startDrag != null && endDrag != null) {
                g2.setPaint(Color.red);
                g2.drawPolygon(triangle);   
             }   
          }//end paint       

              }//end private class PaintSurface

person Jessy    schedule 28.09.2009    source источник


Ответы (1)


когда вы начинаете перетаскивать, вы должны определить, находится ли ваше текущее местоположение мыши на одном из существующих полигонов, также отметьте начальное местоположение

Когда это так, вы не добавляете новый полигон, а добавляете количество, перемещенное в разные точки существующего полигона, и перерисовываете.

person Peter    schedule 28.09.2009
comment
нет разницы между начальной точкой перетаскивания и конечной точкой перетаскивания, скажем, вы перетаскиваете от 5,10 до 15,25, вы переместили 10 и 15, поэтому вы добавляете 10 ко всем x треугольника и 15 ко всем y - person Peter; 29.09.2009