java - 鼠标拖拽

标签 java shapes

我在显示所有三角形时遇到问题。我使用鼠标拖动绘制了一个三角形。每次我画一个新的三角形,以前的三角形就消失了。怎样才能让三角形留下来,这样绘图面板上就会出现很多三角形?

.....
private class PaintSurface extends JComponent {
   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();
      }

      public void mouseReleased(MouseEvent e) {
         Shape r = makeRectangle(startDrag.x, startDrag.y, e.getX(), e.getY());          
         shapes.add(r); 
         if (startDrag.x > endDrag.x)
            midPoint = new Point((endDrag.x +(Math.abs(startDrag.x - endDrag.x)/2)),e.getY());
         else 
            midPoint = new Point((endDrag.x -(Math.abs(startDrag.x - endDrag.x)/2)),e.getY()); 
         int[] xs = { startDrag.x, endDrag.x, midPoint.x };
         int[] ys = { startDrag.y, startDrag.y, midPoint.y };          
         triangle = new Polygon(xs, ys, 3);               
         startDrag = null;
         endDrag = null;
         repaint();
        }
     });

     this.addMouseMotionListener(new MouseMotionAdapter() {
        public void mouseDragged(MouseEvent e) {
           endDrag = new Point(e.getX(), e.getY());
           repaint();
        }
     });
  }

  public void paint(Graphics g) {
     Graphics2D g2 = (Graphics2D) g;
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     paintBackground(g2);
     Color[] colors = { Color.YELLOW, Color.MAGENTA, Color.CYAN , Color.RED, Color.BLUE, Color.PINK};
     int colorIndex = 0;
     g2.setStroke(new BasicStroke(1));
     g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.50f));
     g2.fillPolygon(triangle);        
     }
}

最佳答案

您在屏幕上看到的就是您在绘图函数中绘制的内容。目前,您只能在 triangle 变量中存储一个三角形,不断替换和绘制它。

你需要的是存储一个三角形列表,并在 mouseReleased 中每次添加一个新的到列表中。以下是要更改的内容:

private class PaintSurface extends JComponent {
   ...
   //Polygon triangle;
   List<Polygon> triangles = new LinkedList<Polygon>();
   ...

   public PaintSurface() {

      public void mouseReleased(MouseEvent e) {
         ...
         //triangle = new Polygon(xs, ys, 3);
         triangles.add( new Polygon(xs, ys, 3); );
         ...
        }
     });
     ...
  }

  public void paint(Graphics g) {
     ...
     //g2.fillPolygon(triangle);
     for (Polygon triangle : triangles) g2.fillPolygon(triangle);
     ...
   }
}

关于java - 鼠标拖拽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1480983/

相关文章:

android - 带形状的多色线

android - 可绘制的形状是不可见的

java - 我可以将 GAE 的 dev_appserver 设置为在我更改 .class 文件时自动重新加载上下文吗?

java - 使用 Codename One NativeInterface 调用 native Android 库时仍然出现 Nullpointer

Java-如何调用具有返回类型的方法

java - EnumMap.containsValue(null) 返回真 JDK 7

python - 如何在 OpenCV 中绘制半圆?

android - 创建圆角三角形

java - Scala 有 floatToIntBits 和 intBitsToFloat 方法吗?

ios - iphone怎么画椭圆和其他形状