Рисование каждого прямоугольника по щелчку мыши вместо setLocation
В настоящее время этот сегмент кода перемещает текущий прямоугольник, уже нарисованный на кадре, щелчком мыши. Координаты этого клика переходят в переменные x и y. Везде, где щелкают по рамке, прямоугольник перемещается в это место. Я хочу, чтобы вместо этого он просто рисовал новый прямоугольник, поэтому, например, когда я нажимаю 10 раз случайным образом на экране, будет 10 прямоугольников. Как ты это делаешь?
public void moveRectangleTo(int x, int y)
{
box.setLocation(x, y);
repaint();
}
ПОЛНЫЙ КОД: класс RectangleComponent
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);
}
}
1 ответ
Решение
Вам нужно вести список ящиков.
private List<Rectangle> boxes = new ArrayList<>();
По щелчку мыши, вместо перемещения поля, добавьте новый:
public void addRectangleAt(int x, int y)
{
Rectangle boxNew = new Rectangle(x, y, BOX_WIDTH, BOX_HEIGHT);
boxes.add(boxNew);
repaint();
}
Тогда в вашем paintComponent()
метод, переберите список ящиков и нарисуйте каждый.