Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在鼠标单击而不是设置位置上绘制每个矩形_Java_Swing_Mouseclick Event - Fatal编程技术网

Java 在鼠标单击而不是设置位置上绘制每个矩形

Java 在鼠标单击而不是设置位置上绘制每个矩形,java,swing,mouseclick-event,Java,Swing,Mouseclick Event,当前,此代码段移动通过鼠标单击已在帧上绘制的当前矩形。单击的坐标转到变量x和y。无论在框架上单击何处,矩形都将移动到该位置。我希望它只是画一个新的矩形,因此,例如,当我在屏幕上随机单击10次时,将有10个矩形。你是怎么做到的 public void moveRectangleTo(int x, int y) { box.setLocation(x, y); repaint(); } 完整代码: 矩形组件类 impo

当前,此代码段移动通过鼠标单击已在帧上绘制的当前矩形。单击的坐标转到变量xy。无论在框架上单击何处,矩形都将移动到该位置。我希望它只是画一个新的矩形,因此,例如,当我在屏幕上随机单击10次时,将有10个矩形。你是怎么做到的

public void moveRectangleTo(int x, int y)
       {
          box.setLocation(x, y);
          repaint();      
       }
完整代码: 矩形组件类

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;

public class RectangleComponent2 extends JComponent
{
   private static final int BOX_X = 100;
   private static final int BOX_Y = 100;
   private static final int BOX_WIDTH = 20;
   private static final int BOX_HEIGHT = 30;

   private Rectangle box;

   public RectangleComponent2()
   {  
      box = new Rectangle(BOX_X, BOX_Y, BOX_WIDTH, BOX_HEIGHT);         
   }

   public void paintComponent(Graphics g)
   {  
      Graphics2D g2 = (Graphics2D) g;

      g2.draw(box);
   }

   public void moveRectangleTo(int x, int y)
   {
      box.setLocation(x, y);
      repaint();      
   }
}
矩形框架类:

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;

public class RectangleFrame2 extends JFrame {
   private static final int FRAME_WIDTH = 300;
   private static final int FRAME_HEIGHT = 400;
   private RectangleComponent2 scene;

   class MousePressListener implements MouseListener {  
      public void mousePressed(MouseEvent event) {  
         int x = event.getX();
         int y = event.getY();
         scene.moveRectangleTo(x, y);
      }
      public void mouseReleased(MouseEvent event) {}
      public void mouseClicked(MouseEvent event) {}
      public void mouseEntered(MouseEvent event) {}
      public void mouseExited(MouseEvent event) {}
   }

   public RectangleFrame2() {
      scene = new RectangleComponent2();
      add(scene);

      setSize(FRAME_WIDTH, FRAME_HEIGHT);

      MouseListener listener = new MousePressListener();
      scene.addMouseListener(listener);
   }
} 

你需要保留一份箱子清单

private List<Rectangle> boxes = new ArrayList<>();

然后在您的
paintComponent()
方法中,遍历框列表并绘制每个框。

您需要保留框列表

private List<Rectangle> boxes = new ArrayList<>();

然后在您的
paintComponent()
方法中,遍历框列表并绘制每个框。

您还可以演示如何在paintComponent中迭代/循环吗?@visiontech60:您肯定知道如何使用for循环,不是吗?答案是1+。还记得提醒他在paintComponent中调用super的方法。是的,但是我不太习惯将ArrayList与it@visiontech60:然后测试它,看看你能想出什么,但在请求更多代码之前请先这样做。对ArrayList进行了一些研究并找到了答案+代表hovercraft eels guy让我努力找到自己的答案。你能告诉我如何在paintComponent中迭代/循环吗?@VisionTech 60:你肯定知道如何使用for循环,不是吗?答案是1+。还记得提醒他在paintComponent中调用super的方法。是的,但是我不太习惯将ArrayList与it@visiontech60:然后测试它,看看你能想出什么,但在请求更多代码之前请先这样做。对ArrayList进行了一些研究并找到了答案+代表气垫船鳗鱼的家伙让我努力找到自己的答案。